NumPy:連続した数値の配列を作る(arange, linspace)

数値が規則的に並んだ配列を作りたいとき、arangelinspace が便利です。どちらも連続した数値を生成しますが、指定の仕方が異なります。

arange:ステップ幅を指定

np.arange() は、Python の range() に似た感覚で使えます。開始値から終了値の手前まで、指定したステップ幅で数値を生成します。

import numpy as np

# 0から9まで(10は含まない)
a = np.arange(10)
print(a)  # [0 1 2 3 4 5 6 7 8 9]

# 1から10まで
b = np.arange(1, 11)
print(b)  # [ 1  2  3  4  5  6  7  8  9 10]

# 0から1まで0.2刻み
c = np.arange(0, 1, 0.2)
print(c)  # [0.  0.2 0.4 0.6 0.8]

終了値は含まれない点に注意してください。これは Python の range() と同じ仕様です。

小数のステップ幅を使うと、浮動小数点の誤差で要素数が意図と異なる場合があります。要素数を正確に指定したいときは linspace を使いましょう。

linspace:要素数を指定

np.linspace() は、開始値と終了値の間を指定した個数で等分割します。終了値が含まれる点が arange との大きな違いです。

# 0から1を5等分
a = np.linspace(0, 1, 5)
print(a)  # [0.   0.25 0.5  0.75 1.  ]

# 0から10を11個に分割(0, 1, 2, ..., 10)
b = np.linspace(0, 10, 11)
print(b)  # [ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]

グラフを描くときの x 軸の値を作るのに重宝します。

# 0から2πまで100点
x = np.linspace(0, 2 * np.pi, 100)

終了値を含めたくない場合は、endpoint=False を指定します。

a = np.linspace(0, 1, 5, endpoint=False)
print(a)  # [0.  0.2 0.4 0.6 0.8]

使い分けの目安

arange

ステップ幅が決まっているとき。整数の連番を作りたいとき

linspace

要素数が決まっているとき。グラフ用のデータ点を作りたいとき

どちらを使うか迷ったら、「刻み幅で考えるか、個数で考えるか」で判断するとよいでしょう。