こんにちは!インストラクターのフクロウです。
この記事では、等差数列を作るための関数、np.linspaceを紹介します。同じような目的で使うNumPyの関数に、np.arangeがありますね。こちらは数列のstep幅を指定しましたが、np.linspaceでは要素数を指定する点が異なります。
どちらも非常に便利な関数なので、この記事で是非使い方を覚えてくださいね!
np.linspaceの引数と返り値
numpy.
linspace
(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
startとstopで指定された区間で、numで指定された要素の等差数列を返します。
Parameters: |
|
---|---|
Returns: |
|
使い方
以降のコードはJupyterで実行してみてください。
まずはNumPyをimportします。
また、結果の可視化のためにmatplotlibも用意しましょう。
import numpy as np
import matplotlib.pyplot as plt
基本的な使い方
最も簡単なnp.linspaceの使い方は、startとstop(開始点と終了点)を指定するだけです。
In [2]:
Y = np.linspace(0, 100)
In [3]:
def array_info(Y):
print("配列のshape", Y.shape)
print("配列の要素のデータ型", Y.dtype)
print("配列の中身n",Y)
X = np.arange(len(Y))
plt.figure(figsize=(15,5))
plt.title("linspace result")
plt.scatter(X,Y)
In [4]:
array_info(Y)
Out:
第三引数で要素数を変える
要素数を変えるには、第三引数numに値を指定します。
Y2 = np.linspace(0, 100, 20)
array_info(Y2)
Out:
これまでは昇順の数列でしたが、降順にもできます。
第一引数と第二引数の値をstart>endstart>endとするだけでOKです。
Y3 = np.linspace(0,-10, 20)
array_info(Y3)
endpointを使って[start, end)な数列を作る
endpointをFalseにした場合、endは必ずしも数列に含まれません。完璧な等差数列を作りたい場合はおすすめです。
Y4 = np.linspace(10,50,33, endpoint=False) array_info(Y4)
retstepを使って数列のstep幅を取得
retstepをTrueにすると、np.linspaceの返り値の形が変わります。数列とstep幅をまとめたtuple型が返ってきます。step幅を確認することができるので使ってみましょう。
result = np.linspace(0, -50, 7, endpoint=False, retstep=True) result
Y5, step5 = result
array_info(Y5)
print("step幅:",step5)
まとめ
この記事では、等差数列が作れるNumPyの関数、np.linspaceを紹介しました。np.arangeと同じように、等差数列がほしいタイミングで活躍する関数です。
要素数を指定できる点、末尾の値を優先するか等間隔であることを優先するかを選べる汎用性の高さなど、様々な要求に答えてくれる関数ですね。
是非使いこなして、科学計算や機械学習の実装で役立ててください。今回の記事は下記の記事を参考にしています。
参考記事: