【Python】NumPyで等差数列を作成する

今回はPythonのNumPyで等差数列を作成する方法について紹介します。

本記事ではまず等差数列について簡単に紹介(おさらい)します。その後、実際にNumPyで等差数列を作成する方法を紹介します。

等差数列とは

等差数列の定義は「隣接する項が共通の差(公差)を持つ数列」です。つまり、最初の項に一定の数を足し続ける(引き続ける)数列が等差数列です。

たとえば以下のような数列が等差数列です。

1, 3, 5, 7, 9, 11

この場合、どの項から見ても隣接する項との差は2になります。つまり”等差”数列となります。

ちなみに用語として、初めの数(上では1)を初項、隣接する項との差は公差と呼びます。

NumPyで等差数列を作成する

NumPyで等差数列を作成する方法には、numpy.arrange()またはnumpy.linspace()を使う二通りがあります。それぞれで数列を作成するプロセスが異なります。

numpy.arrange()

numpy.arrange()は公差を指定して等差数列を作成します。また、渡す引数の数によって数列の作られ方が異なります。

  • numpy.arrange(stop)
  • numpy.arrange(start, stop)
  • numpy.arrange(start, stop, step)

numpy.arrange(stop) は0≦ n <stopで、公差は1となります。

numpy.arrange(start, stop) は start≦ n <stopで、公差は1となります。

numpy.arrange(start, stop, step) はstart≦ n <stopで、公差はstepとなります。

引数が3つない場合は公差が1の等差数列となり、実質連番の配列になります。

import numpy as np

print(np.arange(5))
#[0 1 2 3 4]

print(np.arange(5, 10))
#[5 6 7 8 9]

print(np.arange(5, 10, 2))
#[5 7 9]

小数や負数を指定することもできます。

print(np.arange(-5, 10, 3))
#[-5 -2  1  4  7]

print(np.arange(-0.5, 1, 0.3))
#[-0.5 -0.2  0.1  0.4  0.7]

以上numpy.arrange()で等差数列を作成する方法でしたが、こちらのやり方ではコードを見てすぐ等差数列を作成していると理解しにくい点が難点です。

numpy.linspace()

numpy.linspace()では数列の要素数を指定して等差数列を作成します。

numpy.linspace(start, stop, num)

startは数列の最初の値、stopは最後の値です。numは数列の要素数を指定します。numに応じて公差が算出され、数列の値が決定されます。

print(np.linspace(0, 15, 5))
#[ 0.    3.75  7.5  11.25 15.  ]

stopの値を数列に含めるかも指定することができます。endpoint=Falseとすると、stopを含まずに数列が作成されます。

print(np.linspace(0, 15, 5, endpoint=False))
#[ 0.  3.  6.  9. 12.]

公差を取得する

引数retstep=Trueとすると、公差(step)を取得することができます。(等差数列, 公差)のタプルが返ってきます。

print(np.linspace(0, 15, 5, retstep=True))
#(array([ 0.  ,  3.75,  7.5 , 11.25, 15.  ]), 3.75)

公差のみを取得したい場合は、タプルのインデックスを指定します。

print(np.linspace(0, 15, 5, retstep=True)[1])
#3.75

Pythonでデータサイエンスするなら

Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。

ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^

まとめ

PythonのNumpyで等差数列を作成する方法を紹介しました。numpy.arrange()およびnumpy.linspace()で作成することができますが、コード上で等差数列を作成していることを明示的に示すには numpy.linspace() がよさそうです。

しかしながら、両者で引数に指定する情報が異なるので、状況に応じて使い分けが必要ですね。