NumPyのlinspace関数で任意の要素数の等差数列の配列を生成する方法

np.linspace関数は、等差数列の配列を生成するために使う関数です。

似たような関数に、np.arange関数がありますが、np.linspace関数の方が、内部処理上、小数の計算の精度が高いという特徴があります。そのため、基本的には小数の等差数列の生成にはnp.linspace関数が適しています。一方で、整数の等差数列の生成にはnp.arange関数を使うと良いでしょう。

なお、np.arange関数については以下のページで解説しています。

それでは、np.linspace関数の使い方を実際のコードで見ていきましょう。

目次

1. 書式

まずは基本的な書き方を以下にまとめておきます。

numpy.linspace

書き方:

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

パラメーター:

start: 数値または数値のシーケンス(array_like)
開始数値を指定します。
stop: 数値または数値のシーケンス(array_like)
終了数値を指定します。ここで指定した数値は生成される配列に含まれます。ただし引数で、endpoint=False にした場合は含まれません。
num: 整数(オプション)
生成する配列の要素の数(長さ)を指定します。デフォルトは50です。
endpoint: ブール値(オプション)
デフォルトのTrueでは、stopで指定した数値が生成される配列に含まれます。Falseにすると含まれません。
retstep: ブール値(オプション)
Trueにした場合、配列とともに公差の値を返します。デフォルトはFalseです。
dtype: データ型(オプション)
出力する配列のデータ型を指定します。デフォルトはNoneでは、start や stop に渡した数値のデータ型から類推します。
axis: 整数(オプション)
start と stop に数値のシーケンス(array_like)を渡した場合のみ使用可能です。等差数列を配列のどの次元軸に沿って生成するのかを指定します。

戻り値: 

配列(ndarray):
start以上 stop以下の範囲でnumで指定した要素数の等差数列の配列。endpoint=Falseの場合はstopの値は含まない。
公差(step) (オプション)
restep=Trueにした場合のみ、配列に加えて公差の数値をfloat型で返す。

一緒に確認したい属性:

  • arange: 連番の配列を生成
  • geomspace:
  • logspace:

start と stop の2つが必須引数で、それ以外はオプション引数です。

2. サンプルコード

それでは、実際のコードで確認していきましょう。

start と stop を指定

startとstopのみを指定した場合、その範囲で、要素数が50個の等差数列の配列を生成します。

In [1]:
#  デフォルトでは要素数は50
np.linspace(1, 50)
Out[1]:
array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12., 13.,
       14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., 25., 26.,
       27., 28., 29., 30., 31., 32., 33., 34., 35., 36., 37., 38., 39.,
       40., 41., 42., 43., 44., 45., 46., 47., 48., 49., 50.])

num を指定

第三引数で、生成する配列の要素の数(配列の長さ)を指定することができます。

In [2]:
#  第三引数で生成する配列の要素数を指定
np.linspace(1, 50, 5)
Out[2]:
array([ 1.  , 13.25, 25.5 , 37.75, 50.  ])

endpoint の指定

オプション引数endpoint=Falseにすると、生成する配列にstopの値が含まれなくなります。

In [3]:
#  endpoint=False で stopの数値を含めない
np.linspace(2.0, 3.0, num=5, endpoint=False)
Out[3]:
array([2. , 2.2, 2.4, 2.6, 2.8])

retstep の指定

retstep=True にすると、配列とともに公差を戻してくれます。戻り値は、配列と公差(float型)のタプルになります。

In [4]:
#   retstep=True で公差を取得
np.linspace(2.0, 3.0, num=5, retstep=True)
Out[4]:
(array([2.  , 2.25, 2.5 , 2.75, 3.  ]), 0.25)

start と step に数値のシーケンスを渡す

start と step には要素が数値の配列やリスト・タプルなどのシーケンスを渡すことができます。その場合は、それぞれの等差数列を生成します。

In [5]:
#  start と step には配列やリストなどを渡すことも可能
a = np.array([0, 50])
b = [10, 100]
np.linspace(a, b, num=5)
Out[5]:
array([[  0. ,  50. ],
       [  2.5,  62.5],
       [  5. ,  75. ],
       [  7.5,  87.5],
       [ 10. , 100. ]])

この時、オプション引数の axis= で生成する等差数列の、配列内における軸を指定することができます。

In [6]:
#  生成する配列の軸を変更
np.linspace(a, b, num=5, axis=1)
Out[6]:
array([[  0. ,   2.5,   5. ,   7.5,  10. ],
       [ 50. ,  62.5,  75. ,  87.5, 100. ]])

3. まとめ

ここまで見てきたように、np.linspace関数は、指定の範囲の数値の中から、指定の要素数の等差数列を生成する関数です。

なお似た機能を持つ関数に、np.arange関数があります。

冒頭で述べたとおり、基本的には、整数の等差数列を生成するならnp.arange関数を、小数の等差数列を生成するならnp.linspace関数を使うようにしましょう。np.linspace関数の方が浮動小数点数の計算の精度が高いからです。これは扱うデータが大きくなればなるほど重要になります。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる