数値が規則的に並んだ配列を作りたいとき、arange と linspace が便利です。どちらも連続した数値を生成しますが、指定の仕方が異なります。
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
要素数が決まっているとき。グラフ用のデータ点を作りたいとき
どちらを使うか迷ったら、「刻み幅で考えるか、個数で考えるか」で判断するとよいでしょう。