3秒でわかる
start から stop までを等間隔に区切った値を、指定した個数だけ作る NumPy 関数。グラフの横軸や実験用のパラメータを一行で用意できます。
もう少し詳しく
どういうものか
np.linspace(start, stop, num) は、start から stop までを等間隔に割った num 個の値を持つ配列を返します。既定では stop も含みます。刻み幅は自分で計算せず、(stop - start) / (num - 1) として NumPy が決めます。
つまり指定するのは「刻み幅」ではなく「何個ほしいか」です。ここが np.arange との決定的な違いです。
なぜ必要か
グラフを描くとき、横軸には端から端まできれいに並んだ点が必要です。刻み幅から作ろうとすると 0.1 のような値が浮動小数で正確に表せないため、最後の点が入ったり入らなかったりします。個数を指定する linspace なら、端の値は必ず指定どおりに入り、点の数もぶれません。
具体例
0 から 2π までを 200 点に割ってサインカーブを描く、という最も多い使い方です。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 200)
y = np.sin(x)
print(x[0], x[-1], len(x)) # 0.0 6.283185307179586 200
<a href="/glossary/plt-plot" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">plt.plot</a>(x, y)
plt.show()
# 端を含めたくないとき
np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1. ]
np.linspace(0, 1, 5, endpoint=False) # [0. 0.2 0.4 0.6 0.8]つまずきやすいところ
np.linspace(0, 10, 2) は 0.5 刻みではなく [0., 10.] の2要素です1/4 になりますnp.logspace を使います似た用語との違い
| 関数 | 指定するもの | 終端 |
|---|---|---|
| np.linspace | 個数 | 含む |
| np.arange | 刻み幅 | 含まない |
| np.logspace | 個数 | 含む。値は10の冪 |
覚え方
linspace は linearly spaced の略で、「線形に間隔を空ける」ことだけを担当します。個数を渡す、と覚えれば arange と混ざりません。