【NumPy入門 np.linspace】等差数列を作成する関数
2024
5/06
こんにちは!インストラクター のフクロウです。
この記事では、等差数列を作るための関数、np.linspaceを紹介します。同じような目的で使うNumPyの関数に、np.arangeがありますね。こちらは数列のstep幅を指定しましたが、np.linspaceでは要素数を指定する点が異なります。
どちらも非常に便利な関数なので、この記事で是非使い方を覚えてくださいね!
目次
np.linspaceの引数と返り値
参考:SciPy.org
numpy.
linspace
( start , stop , num=50 , endpoint=True , retstep=False , dtype=None )
startとstopで指定された区間で、numで指定された要素の等差数列を返します。
Parameters:
start : scalar(数字)
シーケンスの最初の値
stop : scalar
シーケンスの最後の値
num : int, optional
生成するサンプル数、デフォルトは50個になっています。
endpoint : bool, optional
Trueならばstopが最後の値になります。
Falseならばstopの値は数列に含まれません。
デフォルトではTrueです。
retstep : bool, optional
Trueならばstep数も一緒に返されます。返り値の例:(sample, step)
デフォルトではFalseです。
dtype : dtype, optional
出力配列の型を指定できます。
Returns:
samples : ndarray
等差数列を格納した配列を返します。
step : float, optional
restepがTrueの場合だけ返されます。
step幅が返されます。
使い方
以降のコードはJupyterで実行してみてください。
まずはNumPyをimportします。
また、結果の可視化のためにmatplotlibも用意しましょう。
基本的な使い方
最も簡単なnp.linspaceの使い方は、startとstop(開始点と終了点)を指定するだけです。
配列のshape (50,)
配列の要素のデータ型 float64
配列の中身
[ 0. 2.04081633 4.08163265 6.12244898 8.16326531
10.20408163 12.24489796 14.28571429 16.32653061 18.36734694
20.40816327 22.44897959 24.48979592 26.53061224 28.57142857
30.6122449 32.65306122 34.69387755 36.73469388 38.7755102
40.81632653 42.85714286 44.89795918 46.93877551 48.97959184
51.02040816 53.06122449 55.10204082 57.14285714 59.18367347
61.2244898 63.26530612 65.30612245 67.34693878 69.3877551
71.42857143 73.46938776 75.51020408 77.55102041 79.59183673
81.63265306 83.67346939 85.71428571 87.75510204 89.79591837
91.83673469 93.87755102 95.91836735 97.95918367 100. ]
要素数を変えるには、第三引数numに値を指定します。
配列のshape (20,)
配列の要素のデータ型 float64
配列の中身
[ 0. 5.26315789 10.52631579 15.78947368 21.05263158
26.31578947 31.57894737 36.84210526 42.10526316 47.36842105
52.63157895 57.89473684 63.15789474 68.42105263 73.68421053
78.94736842 84.21052632 89.47368421 94.73684211 100. ]
これまでは昇順の数列でしたが、降順にもできます。
第一引数と第二引数の値をs t a r t > e n d start>end とするだけでOKです。
Out:
配列のshape (20,)
配列の要素のデータ型 float64
配列の中身
[ 0. -0.52631579 -1.05263158 -1.57894737 -2.10526316
-2.63157895 -3.15789474 -3.68421053 -4.21052632 -4.73684211
-5.26315789 -5.78947368 -6.31578947 -6.84210526 -7.36842105
-7.89473684 -8.42105263 -8.94736842 -9.47368421 -10. ]
endpointを使って[start, end)な数列を作る
endpointをFalseにした場合、endは必ずしも数列に含まれません。完璧な等差数列を作りたい場合はおすすめです。
Out:
配列のshape (33,)
配列の要素のデータ型 float64
配列の中身
[10. 11.21212121 12.42424242 13.63636364 14.84848485 16.06060606
17.27272727 18.48484848 19.6969697 20.90909091 22.12121212 23.33333333
24.54545455 25.75757576 26.96969697 28.18181818 29.39393939 30.60606061
31.81818182 33.03030303 34.24242424 35.45454545 36.66666667 37.87878788
39.09090909 40.3030303 41.51515152 42.72727273 43.93939394 45.15151515
46.36363636 47.57575758 48.78787879]
retstepを使って数列のstep幅を取得
retstepをTrueにすると、np.linspaceの返り値の形が変わります。数列とstep幅をまとめたtuple型が返ってきます。step幅を確認することができるので使ってみましょう。
Out[8]:
(array([ 0. , -7.14285714, -14.28571429, -21.42857143,
-28.57142857, -35.71428571, -42.85714286]), -7.142857142857143)
Out:
配列のshape (7,)
配列の要素のデータ型 float64
配列の中身
[ 0. -7.14285714 -14.28571429 -21.42857143 -28.57142857
-35.71428571 -42.85714286]
step幅: -7.142857142857143
まとめ
この記事では、等差数列が作れるNumPyの関数、np.linspaceを紹介しました。np.arangeと同じように、等差数列がほしいタイミングで活躍する関数です。
要素数を指定できる点、末尾の値を優先するか等間隔であることを優先するかを選べる汎用性の高さなど、様々な要求に答えてくれる関数ですね。
是非使いこなして、科学計算や機械学習の実装で役立ててください。今回の記事は下記の記事を参考にしています。
参考記事:
この記事を書いた人
【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン