YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

【徹底図解】NumPy arange | 連続する数列を作成する!【サンプルコード】

numpyには、配列ndarrayを生成するための様々な関数があります。

連続する数列を生成する関数arange()を紹介します。

配列ndarrayの基本はこちらをチェック!

arrangeの使い方

arangeでは引数で、

  • 数列の始点start
  • 数列の終点stop
  • 数値の間隔step

を指定して、連続した数値配列を作成することができます。

startstepは省略することもできます。
指定しなかった場合のデフォルト値も覚えておきましょう

  • startのデフォルト = 0
  • stepのデフォルト = 1

以下では、基本的なarange使用方法をサンプルコードつきで解説します。

arange(stop) ⇒ 0からstopまでの連番

引数を1つだけ指定すると、0からstop-1まで1ずつ増加する数列を作成します。

stop自身は含まれない点に注意してください。

x = np.arange(5)
# x → array([0, 1, 2, 3, 4])

arange(start, stop) ⇒ startからstop-1までの連番

引数を2つ指定すると、startからstop-1まで1ずつ増加する数列を作成します。

この場合もstop自身は含まれない点に注意してください。

y = np.arange(5, 10)
# y → array([5, 6, 7, 8, 9])

arange(start, stop, step) ⇒ 数値の間隔をstepで指定

引数を3つ指定すると、startからstop-stepまでstepずつ増加する数列を作成します。

この場合もstop自身は含まれない点に注意してください。

z = np.arange(10, 20, 3)
# z → array([10, 13, 16, 19])

start0の場合は、startを省略して、stepをキーワード引数で指定することも可能です。

x = np.arange(10, step=2)
# x → array([0, 2, 4, 6, 8])

stopがstart以下の場合の挙動

何らかの理由でstepよりも小さい値をstopに指定すると空の配列が返されます。

x = np.arange(start=10, stop=9)
# array([], dtype=int32)

startstopに直接数字を指定するのではなく、変数で指定している場合に、こういう状況に出くわすことがあるかもしれませんね。

arange()とlinspace()の違い

arange()と類似した関数にlinspace()関数があります。

どちらも等間隔の数列を生成しますが、それぞれ次の特徴があります。

  • arange():数列の間隔を指定
  • linspace():数列の要素数を指定

例えば

  • 0から100までの数字を10ずつ増やしたいと思った場合はarange()
  • 10個に区切りたいと思った場合はlinspace()

を使うと便利です。

x = np.arange(0, 100, 25)
# x → array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
y = np.linspace(0, 100, 10)
# y → array([  0.        ,  11.11111111,  22.22222222,  33.33333333,
#             44.44444444,  55.55555556,  66.66666667,  77.77777778,
#             88.88888889, 100.        ])

また最小限の引数を渡した(stopだけを指定した)場合の挙動が特徴的です。

  • arange(stop)0からstopまで1ずつ増加する整数列
  • linspacec(stop)0からstopまでを50分割した数列(整数とは限らない)

そのため、手軽に数列を作るときには

  • 整数列を作りたいときはarange()
  • グラフ作成で区間を細かく区切りたいときはlinspace()

が便利な印象です。

x = np.arange(0, 50)
# x → array([ 0,  1,  2,  3,..., 49]) #1ずつ増える整数列を作る
y = np.linspace(0, 10)
# y → array([ 0.  ,  0.20408163,  0.40816327,..., 10.]) #50要素にとにかく分割する

おわりに

arangeを使いこなせるようになったら、あわせてlinspaceも覚えたいですね!

他にもnumpyの記事を書いていますのでぜひ見てみてください!