【NumPy入門 np.arange】等差数列(1,3,5,7..)を生成するarange関数

等差数列を生成する arange関数

等差数列(一定間隔で並べられた数字)を作るPythonの関数に、rangeがあります。

これに対応するNumPyの関数、np.arange関数を紹介します。

NumPyの関数はPythonの関数に比べて、一般的に高速であることが知られています。Pythonの関数にもNumPyで対応する関数が用意されているものが多いので、しっかり覚えてNumPyのポテンシャルを活かせるコードを書いていきましょう!

目次

np.arangeの引数と返り値

※参考:SciPy.org

numpy.arange([start]stop[step]dtype=None)

指定された区間内(start ~ stop)で等間隔の値をもった配列を返します。startからstopまでで等間隔の値をもつ配列を作りますが、stepを指定することで間隔を指定することができます。

この関数はPythonのrange関数とほぼ同じ関数ですが、返り値がlistではなくnp.arrayであることに注意です! 要素に小数(0.1など)を使いたい場合は、np.linspaceの方が適しています。

Parameters:
start : 数字, optional

等差数列の開始の値です。デフォルトは0。

stop : 数字

等差数列の終わりの値です。stepの値によってはこの値で終わらない場合もあります。

step : 数字, optional
値の間隔を指定するパラメータです。デフォルトは1。
dtype : dtype

配列の要素の型です。dtypeが与えられていない場合は、他のパラメータから適当な値が使われます。

Returns:
arange : ndarray

等差数列が入った配列を返します。

使い方

以下のコードはjupyterで実行する事をおすすめします。

import numpy as np
まずはライブラリをimport。

基本的な使い方

基本的な使い方はrange関数と同じです。

In [2]:
x = np.arange(10)
In [3]:
def array_info(x):
    print("配列のshape", x.shape)
    print("配列の要素のデータ型", x.dtype)
    print("配列の中身n",x)
In [4]:
array_info(x)
Out:
配列のshape (10,)
配列の要素のデータ型 int64
配列の中身
 [0 1 2 3 4 5 6 7 8 9]

startとstopを指定することで、任意の範囲の等差数列が作れます。

In [5]:
x2 = np.arange(0,10)
array_info(x2)
Out:
配列のshape (10,)
配列の要素のデータ型 int64
配列の中身
 [0 1 2 3 4 5 6 7 8 9]
In [6]:
x3 = np.arange(5,11)
array_info(x3)
Out:
配列のshape (6,)
配列の要素のデータ型 int64
配列の中身
 [ 5  6  7  8  9 10]

step幅を指定する

step幅を指定することもできます。

引数の順番に注意してください。

In [7]:
x4 = np.arange(5,15,3)
array_info(x4)
Out:
配列のshape (4,)
配列の要素のデータ型 int64
配列の中身
 [ 5  8 11 14]

降順の等差数列

今までは昇順の等差数列ばかり作ってきましたが、もちろん降順も作れます。

ただし、step幅を指定してあげないと空の配列になってしまいます。注意してください。

In [8]:
x4 = np.arange(10, 0)
array_info(x4)
Out:
配列のshape (0,)
配列の要素のデータ型 int64
配列の中身
 []

降順の等差数列を作るstepパラメータはマイナスの値を使います。

In [9]:
x5 = np.arange(10, 0, -1)
array_info(x5)
Out:
配列のshape (10,)
配列の要素のデータ型 int64
配列の中身
 [10  9  8  7  6  5  4  3  2  1]

小数を使った等差数列

もちろん、要素が浮動小数点数になる場合にも対応しています。ですがこれをする場合、np.linspaceというもっと適した関数があるので、そっちを使ったほうが良いと思います。

In [10]:
x5 = np.arange(10, 0, -0.1)
array_info(x5)
Out:
配列のshape (100,)
配列の要素のデータ型 float64
配列の中身
 [10.   9.9  9.8  9.7  9.6  9.5  9.4  9.3  9.2  9.1  9.   8.9  8.8  8.7
  8.6  8.5  8.4  8.3  8.2  8.1  8.   7.9  7.8  7.7  7.6  7.5  7.4  7.3
  7.2  7.1  7.   6.9  6.8  6.7  6.6  6.5  6.4  6.3  6.2  6.1  6.   5.9
  5.8  5.7  5.6  5.5  5.4  5.3  5.2  5.1  5.   4.9  4.8  4.7  4.6  4.5
  4.4  4.3  4.2  4.1  4.   3.9  3.8  3.7  3.6  3.5  3.4  3.3  3.2  3.1
  3.   2.9  2.8  2.7  2.6  2.5  2.4  2.3  2.2  2.1  2.   1.9  1.8  1.7
  1.6  1.5  1.4  1.3  1.2  1.1  1.   0.9  0.8  0.7  0.6  0.5  0.4  0.3
  0.2  0.1]

dtypeの指定

dtypeを明示的に書くことで、出力される配列の型を指定することができます。

In [11]:
x5 = np.arange(10, 0, -0.7, dtype=np.float16)
array_info(x5)
Out:
配列のshape (15,)
配列の要素のデータ型 float16
配列の中身
 [10.      9.3     8.59    7.89    7.188   6.484   5.78    5.08    4.375
  3.672   2.969   2.266   1.5625  0.8594  0.1562]

まとめ

この記事では、NumPyで等差数列を出力する関数、np.arangeを紹介しました。

基本的にはrange関数と同じ動作をするので、覚えるのは簡単ですね! この関数を使いこなして、科学計算・機械学習モデルの実装などに役立ててくださいね。

今回の記事は下記の記事を参考にしています。

参考記事:DeepAge 「連番や等差数列を生成するnumpy.arange関数の使い方」
https://deepage.net/features/numpy-arange.html

この記事を書いた人

第一言語はPythonです。
皆さんRustやりましょう。

目次