概要
numpy で等間隔な連続した値をもつ1次元配列を作成する arange、linspace、logspace、geospace について解説します。
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, ...]
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]
小数点も指定できます。
# 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
で計算します。
# [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
を指定すると、値の間隔も返します。
# 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
を冪乗して元の線形スケールに戻した値が返り値になります。
# 区間 [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
で計算します。
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]
# 対数スケールの底を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()
では、底 base
と start, stop
で区間 $[\text{base}^\text{start}, \text{base}^\text{stop}]$ を指定していたのに対し、numpy.geomspace()
で区間は $[\text{start}, \text{stop}]$ で直接指定するようになっています。また、底は10固定です。
# 区間 [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. ]
コメント