Warning: Undefined variable $position in /home/pystyles/pystyle.info/public_html/wp/wp-content/themes/lionblog/functions.php on line 4897

numpy – arange、linspace、logspace の使い方

numpy – arange、linspace、logspace の使い方

概要

numpy で等間隔な連続した値をもつ1次元配列を作成する arange、linspace、logspace、geospace について解説します。

Advertisement

numpy.arange

指定区間 $[\text{start}, \text{stop})$ で値同士の間隔が step である1次元配列を作成します。

numpy.arange([start, ]stop, [step, ]dtype=None)
引数
名前 デフォルト値
start number
区間の開始値。out にはこの値が含まれます。デフォルトの開始値は 0 です。
stop number
区間の終了値。step が小数点で丸め誤差が影響する場合を除き、out にはこの値は含まれません。
step number
値の間隔。デフォルトのステップサイズは1です。step が位置引数として指定された場合、start も指定しなければなりません。
dtype dtype None
出力配列の型。dtypeが与えられない場合は、他の入力引数からデータ型を推測します。
返り値
名前 説明
arange 等間隔の値の1次元配列。

小数も指定できる点以外は range() と同じです。end は生成される配列に含まれないことに注意してください。

  • arange(e): [0, 1, ..., e - 1]
  • arange(s, e): [s, s + 1, ..., e - 1]
  • arange(s, e, step): [s, s + step, ...]
In [1]:
import numpy as np

# arange(終点)
print(np.arange(10))

# arange(始点, 終点)
print(np.arange(5, 10))

# arange(始点, 終点, ステップ)
print(np.arange(5, 10, 2))
[0 1 2 3 4 5 6 7 8 9]
[5 6 7 8 9]
[5 7 9]

小数点も指定できます。

In [2]:
# arange(始点, 終点)
print(np.arange(0, 1, 0.1))
[0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]

numpy.linspace

指定区間 $[\text{start}, \text{stop}]$ から等間隔に num 個の値をサンプリングして、1次元配列を作成します。

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
引数
名前 デフォルト値
start scalar
区間の開始値。
stop scalar
区間の終了値。
num int 50
生成するサンプル数。デフォルトは50。非負でなければならなりません。
endpoint bool True
Trueの場合、stop が最後のサンプル値になります。False の場合は、stop は含まれません。デフォルトはTrue。
retstep bool False
真の場合は、(samples, step) を返します。
dtype dtype None
出力配列の型。dtypeが与えられない場合は、他の入力引数からデータ型を推測します。
返り値
名前 説明
samples サンプリングした値
step retstep が True の場合のみ値の間隔が返されます。

endpoint の値でサンプリングの仕方が異なります。

  • endpoint=True の場合: サンプリング間隔を step = (end - start) / (num - 1) で計算します。
  • endpoint=False の場合: サンプリング間隔を step = (end - start) / num で計算します。

numpy.linspace()

In [3]:
# [0, 1] で等間隔な値5個を持つ1次元配列を作成する。
a = np.linspace(0, 1, 5, endpoint=True)
print(a)

# endpoint=False を指定すると、stop を含めない。
a = np.linspace(0, 1, 5, endpoint=False)
print(a)
[0.   0.25 0.5  0.75 1.  ]
[0.  0.2 0.4 0.6 0.8]

retstep=True を指定すると、値の間隔も返します。

In [4]:
# retstep=True を指定すると、返り値が (作成した配列, ステップ) となる。
a, step = np.linspace(0, 1, 5, retstep=True)
print(a, step)
[0.   0.25 0.5  0.75 1.  ] 0.25

numpy.logspace

対数スケールで等間隔の数値を返します。

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
引数
名前 デフォルト値
start float
$\text{base}^\text{start}$ が区間の開始値になります。
stop float
$\text{base}^\text{stop}$ が区間の終了値になります。
num integer 50
生成するサンプル数。デフォルトは50。
endpoint boolean True
Trueの場合、stop が最後のサンプル値になります。False の場合は、stop は含まれません。デフォルトはTrue。
base float 10.0
対数の底。デフォルトは 10 です。
dtype dtype None
出力配列の型。dtypeが与えられない場合は、他の入力引数からデータ型を推論します。
返り値
名前 説明
samples サンプリングした値

指定区間 $[\text{base}^\text{start}, \text{base}^\text{stop}]$ で対数スケールで等間隔となる値を num 個サンプリングして、1次元配列を作成します。デフォルト (endpoint=True) では終了値を含みます。 まず、区間 $[\text{start}, \text{stop}]$ に numpy.linspace() と同様のやり方で等間隔に値をサンプリングし、その値で base を冪乗して元の線形スケールに戻した値が返り値になります。

numpy.logspace()

In [5]:
# 区間 [10**2, 10**3] で log スケールで等間隔の4つの値を持つ配列を作成する。
print(np.logspace(2.0, 3.0, num=5))

# 区間 [2, 3] で等間隔の値をサンプリングし、`base` を冪乗して線形スケールに戻すのと同じこと。
print(10 ** np.linspace(2.0, 3.0, 5))
[ 100.          177.827941    316.22776602  562.34132519 1000.        ]
[ 100.          177.827941    316.22776602  562.34132519 1000.        ]

endpoint の値でサンプリングの仕方が異なります。

  • endpoint=True の場合: 対数スケールのサンプリング間隔を step = (end - start) / (num - 1) で計算します。
  • endpoint=False の場合: 対数スケールのサンプリング間隔を step = (end - start) / num で計算します。
In [6]:
print(np.logspace(2.0, 3.0, num=5, endpoint=True))

# endpoint=False を指定すると、stop を含めない。
print(np.logspace(2.0, 3.0, num=5, endpoint=False))
[ 100.          177.827941    316.22776602  562.34132519 1000.        ]
[100.         158.48931925 251.18864315 398.10717055 630.95734448]
In [7]:
# 対数スケールの底を2に変更する。
a = np.logspace(2.0, 3.0, num=5, base=2.0)
print(a)
[4.         4.75682846 5.65685425 6.72717132 8.        ]

numpy.geomspace

対数スケールで等間隔の数値を返します。

numpy.geomspace(start, stop, num=50, endpoint=True, dtype=None)
引数
名前 デフォルト値
start scalar
区間の開始値。
stop scalar
区間の終了値。
num integer 50
生成するサンプル数。デフォルトは50。
endpoint boolean True
Trueの場合、stop が最後のサンプル値になります。False の場合は、stop は含まれません。デフォルトはTrue。
dtype dtype None
出力配列の型。dtypeが与えられない場合は、他の入力引数からデータ型を推測します。
返り値
名前 説明
samples サンプリングした値。

指定区間 $[\text{start}, \text{stop}]$ で常用対数スケールで等間隔となる値を num 個サンプリングして、1次元配列を作成します。デフォルト (endpoint=True) では終了値を含みます。

numpy.logspace() では、底 basestart, stop で区間 $[\text{base}^\text{start}, \text{base}^\text{stop}]$ を指定していたのに対し、numpy.geomspace() で区間は $[\text{start}, \text{stop}]$ で直接指定するようになっています。また、底は10固定です。

numpy.geomspace()

In [8]:
# 区間 [100, 1000] で log スケールで等間隔の4つの値を持つ配列を作成する。
a = np.geomspace(100, 1000, num=5)
print(a)

# 区間 [log10(100), log10(1000)] で等間隔の値をサンプリングし、10を冪乗して線形スケールに戻すのと同じこと。
print(10 ** np.linspace(np.log10(100), np.log10(1000), 5))
[ 100.          177.827941    316.22776602  562.34132519 1000.        ]
[ 100.          177.827941    316.22776602  562.34132519 1000.        ]