numpy.linspaceで等差数列を生成する

numpy.linspace で等差数列を生成する

指定範囲内で、任意の個数のからなる等差数列を生成するには、numpy.linspace を使います。等差数列の生成は、numpy.arange を使っても実現できますが、条件の指定方法が異なるため、使い分けることができるとスマートな記述が可能になります。

numpy.linspace は、範囲個数を指定してndarrayを生成します。等差数列の公差を指定して生成することはできません。公差を指定するには、numpy.arange を使用しましょう。

numpy.arange については、以下のページにまとめていますのでご確認ください。

numpy.arangeで連番配列や等差数列を生成する方法

numpy.linspace関数の使い方

基本的な使い方は、引数で生成される値の範囲の「開始点」「終了点」、それから生成される要素数を指定します。

import numpy as np

# 0-10の範囲内で5個からなる等差数列
a = np.linspace(0, 10, 5)
print(a) # [ 0. 2.5 5. 7.5 10. ]

生成される配列(ndarray)には、「開始点」と「終了点」で指定した値が含まれていることが確認できます。また、要素数が指定した5個分となっています。

ちなみに同様の配列は、numpy.arange でも生成可能です。

a = np.arange(0, 11, 2.5)
print(a) # [ 0. 2.5 5. 7.5 10. ]

numpy.linspace は、指定範囲内で指定要素数の配列を生成するという点が明確になります。範囲と個数を明確にしたい場合はこちらを利用しましょう。

numpy.arange は、公差(step)を指定することができます。あと、Pythonで使える range と同じように使えますし、連番の場合、引数が1つですぐに使えます。

基本的な使い方をは上記の通りですが、numpy.linspace関数にはさまざまなパラメータを指定できます。

numpy.linspace関数のパラメータ

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

パラメータ 説明
start int, float 生成される配列の最初の値を指定します。
stop int, float 生成される値の終点を指定します。endpointにFalseが設定されている場合はこの値を含まなくなります。
num int 省略可能。デフォルト50。生成する配列(ndarray)の要素数を指定します。
endpoint bool 省略可能。デフォルトTrue。Trueの場合、stopが最後の値となります。Falseの場合、stopの値が配列に含まれません。
retstep bool 省略可能。デフォルトFalse。Trueの場合、戻り値が(samples、step)となります。samplesは生成された配列(ndarray)、stepはサンプル間の間隔(公差)です。
dtype dtype 省略可能。出力配列の型を指定します。省略他の入力引数からデータ型を推論します。※基本的には float64 になるみたいです。

return値として、等差配列を返します。retstepが指定されている場合、stepもタプルの要素として返されます。

パラメータの数が多いですが、順番に見ていきましょう。

start, stop, num

start, stop は既に説明した通り、生成される配列の「開始値」「終了値」で、この2つのパラメータの指定は必須です。num は「生成される配列の要素数」ですが、これを省略するとデフォルト値の50個分の要素が生成されます。

import numpy as np

# 0から1まで50個
a = np.linspace(0, 1)
print(a)

# [ 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. ]

また、負の数を生成することも可能です。

import numpy as np

# 負の数の範囲も生成可能
a = np.linspace(0, -9, 10)
print(a) # [ 0. -1. -2. -3. -4. -5. -6. -7. -8. -9.]

endpoint

endpoint に False を指定すると、end で指定した値が生成されなくなります。endpoint のデフォルト値がTrueのため、基本的には end の値も含まれた配列が生成されます。

import numpy as np

# 0から3まで3つの要素を持つ配列(ただし3は含まない)
a = np.linspace(0, 3, 3, endpoint=False)
print(a) # [ 0. 1. 2.]

retstep

retstep にTrue指定すると、戻り値に step(公差)を含めることができます。デフォルト値はFalseなので、基本は生成された配列(ndarray)のみが喘ります。

生成された等差数列の公差が必要な場合にはこのパラメータにTrueを指定することで、(ndarray, 公差) のタプルが戻り値となります。

import numpy as np

a = np.linspace(0, 5, 5, retstep=True)
print(a) # (array([ 0. , 1.25, 2.5 , 3.75, 5. ]), 1.25)

dtype

dtype を指定しないと型が入力値から推論されるとありますが、基本的には float64 となるようです。以下は dtype=int と指定して整数値の配列を生成しています。

import numpy as np

# 整数値の配列を生成
a = np.linspace(1, 5, 5, dtype="int")
print(a) # [1 2 3 4 5]

まとめ

  1. numpy.linspace 関数は、範囲と個数を指定して等差数列を生成する。
  2. numpy.arange 関数でも等差数列が生成できるので、うまく使い分ける。
  3. パラメータで endpoint を含めずに配列を生成できる。

以上。

参考URL