NumPyのnp.linspace
は、線形に等間隔な数列を生成する関数です。同様の数列をnp.arange
で生成することもできますが、np.linspace
を使用したほうがコード量を減らすことができ、読みやすくスマートになります。
等差数列
等差数列は、項の間における値の差が一定である数列のことを指します。 初項はその最初の項、等差は項間の差になります。例えば初項5、等差2の等差数列は次のようになります。
np.linspace
今回扱うnp.linspace
ですが、上述した等差数列を生成する関数です。同様の関数としてnp.arange
がありますが、指定できる引数が異なります。np.linspace
を使用すると、指定した区間をN等分した数列を生成するためのコードだということが明確になり、読みやすくなるので等間隔の数列を生成する場合はこちらを使用しましょう。
np.arange
については以下のページで取り扱っていますので参照してください。
連番や等差数列を生成するnumpy.arange関数の使い方 /features/numpy-arange.html
np.linspace
関数のAPIドキュメントは以下のようになっています。
numpy.linspace(start, stop, num = 50, endpoint = True, retstep = False, dtype = None, axis = 0)
params:
パラメータ名 | 型 | 概要 |
---|---|---|
start |
intまたはfloat | 数列の始点を指定します。 |
stop |
intまたはfloat | 数列の終点を指定します。 |
num |
int | (省略可能)初期値50 生成する配列(ndarray)の要素数を指定します。 |
endpoint |
bool値 | (省略可能)初期値True 生成する数列において、stopを要素に含むかどうか指定します。Trueなら含み、Falseなら含みません。 |
retstep |
boo値 | (省略可能)初期値False 生成された配列(ndarray)の後に公差を表示するかどうか指定します。Trueなら表示し、Falseなら非表示です。 |
dtype |
dtype | (省略可能)初期値None 出力された配列(ndarray)のデータ型を指定します。 dtypeが指定されない場合、データ型はstartとstopから推測される。 推測されるデータ型は決して整数にはならず、引数が 整数の配列を生成する場合でも浮動小数点が選ばれる。 |
axis |
int | デフォルトは0。生成された結果を指定された軸に格納します。 start、stopがシークエンスの場合のみ指定することができます。 -1を指定すると末尾の軸に格納されます。 |
returns:
num等分された等差数列を要素とするndarrayが返されます。
linspace
は、第一、第二引数で生成する等差数列の始点と終点とを指定します。第三引数であるnum
で配列の長さを指定し、第四引数となっているendpoint
で終点を配列の要素として含むかどうかを指定します。残りのretstep
は公差の表示の有無、dtype
ではデータ型を、axis
では生成する結果のサンプルを格納する軸をint
を指定できます。
引数の多い関数となっていますが、普段使う上ではstart
、stop
、num
の3つさえ押さえておけばあまり不自由はしないでしょう。
endpoint = True
のときは、公差は で求められます。
一方、endpoint = False
のときは、 で求めることができます。
生成する等差数列を指定する
まずはstart
、stop
、num
だけ指定してみます。
In [1]: import numpy as np
In [2]: np.linspace(0, 1) # まずは始点を0、終点を1に設定。
Out[2]:
array([ 0. , 0.02040816, 0.04081633, 0.06122449, 0.08163265,
0.10204082, 0.12244898, 0.14285714, 0.16326531, 0.18367347,
0.20408163, 0.2244898 , 0.24489796, 0.26530612, 0.28571429,
0.30612245, 0.32653061, 0.34693878, 0.36734694, 0.3877551 ,
0.40816327, 0.42857143, 0.44897959, 0.46938776, 0.48979592,
0.51020408, 0.53061224, 0.55102041, 0.57142857, 0.59183673,
0.6122449 , 0.63265306, 0.65306122, 0.67346939, 0.69387755,
0.71428571, 0.73469388, 0.75510204, 0.7755102 , 0.79591837,
0.81632653, 0.83673469, 0.85714286, 0.87755102, 0.89795918,
0.91836735, 0.93877551, 0.95918367, 0.97959184, 1. ])
In [3]: np.linspace(0, 49) # 50個の要素が生成されることに注意して、幅を1に調整。
Out[3]:
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.,
11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21.,
22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32.,
33., 34., 35., 36., 37., 38., 39., 40., 41., 42., 43.,
44., 45., 46., 47., 48., 49.])
In [4]: np.linspace(0, 2, 3) # 0~2の区間を3等分
Out[4]: array([ 0., 1., 2.])
In [5]: np.linspace(0, -2, 3) #負の値でも生成可能。
Out[5]: array([ 0., -1., -2.])
In [6]: np.linspace(0, 2, num = 3) # num = 3 のように指定することもできる。
Out[6]: array([ 0., 1., 2.])
指定した終点を含むかどうか指定する
次にendpoint
を指定してみます。
In [7]: np.linspace(0, 2, num = 3, endpoint = False) # 2を要素に含まない配列(ndarray)を返します。
Out[7]: array([ 0. , 0.66666667, 1.33333333])
In [8]: np.linspace(0, 2, num = 3, endpoint = True) # 2を要素に含む配列(ndarray)を返します。これがデフォルトです。
Out[8]: array([ 0., 1., 2.])
公差を表示する
retstep
を指定してみます。公差の表示の有無が切り替わります。
In [9]: np.linspace(0, 1, retstep = True) # 公差の表示を有りにする。
Out[9]:
(array([ 0. , 0.02040816, 0.04081633, 0.06122449, 0.08163265,
0.10204082, 0.12244898, 0.14285714, 0.16326531, 0.18367347,
0.20408163, 0.2244898 , 0.24489796, 0.26530612, 0.28571429,
0.30612245, 0.32653061, 0.34693878, 0.36734694, 0.3877551 ,
0.40816327, 0.42857143, 0.44897959, 0.46938776, 0.48979592,
0.51020408, 0.53061224, 0.55102041, 0.57142857, 0.59183673,
0.6122449 , 0.63265306, 0.65306122, 0.67346939, 0.69387755,
0.71428571, 0.73469388, 0.75510204, 0.7755102 , 0.79591837,
0.81632653, 0.83673469, 0.85714286, 0.87755102, 0.89795918,
0.91836735, 0.93877551, 0.95918367, 0.97959184, 1. ]),
0.020408163265306121)
In [10]: np.linspace(0, 2, num = 3, retstep = True)
Out[10]: (array([ 0., 1., 2.]), 1.0)
In [11]: np.linspace(0, 2, num = 3, retstep = False) # 公差を非表示に(デフォルトの設定)。
Out[11]: array([ 0., 1., 2.])
データ型の変更
最後にdtype
を指定してみます。データ型をfloat64
以外に変えたいときにここの引数を設定してください。
In [12]: np.linspace(0, 2, num = 3) # 何もデータ型を指定しないと、floatの形になる。
Out[12]: array([ 0., 1., 2.])
In [13]: a = np.linspace(0, 1, 3)
In [14]: a.dtype # データ型を確認。
Out[14]: dtype('float64')
In [13]: np.linspace(0, 2, num = 3, dtype = 'int') # データ型を'int'に指定。
Out[13]: array([0, 1, 2])
In [14]: np.linspace(0, 1, num = 4, dtype = 'float32') # データ型を'float32'にすると32ビット浮動小数となる。
Out[14]: array([ 0. , 0.33333334, 0.66666669, 1. ], dtype=float32)
In [15]: np.linspace(0, 1, num = 4, dtype = 'float64') # 64ビット浮動小数
Out[15]: array([ 0. , 0.33333333, 0.66666667, 1. ])