Pynote

Python、機械学習、画像処理について

numpy - 規則的な配列を作成する。 (arange, linspace, meshgrid, etc)

概要

規則的な配列を作成する numpy の関数を整理する。

numpy.arange

指定区間 [start, stop] で値同士の間隔が step である1次元配列を作成する。
引数の指定方法は組み込み関数 range() と同じだが、こちらは float も指定できる。

関数

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

# start だけ指定する。
a = np.arange(10)
print(a)  # [0 1 2 3 4 5 6 7 8 9]

# start, stop を指定する。
a = np.arange(3, 6)
print(a)  # [3 4 5]

# start, stop, step を指定する。
a = np.arange(3, 9, 2)
print(a)  # [3 5 7]

# float を指定する。
a = np.arange(1, 5, 0.5)
print(a)  # [1.  1.5 2.  2.5 3.  3.5 4.  4.5]

numpy.linspace

指定区間 [start, stop] で num 個の等間隔の値を持つ1次元配列を作成する。

  • numpy.range() と異なり、デフォルト (endpoint=True) では終点を含む。
  • linspace は linear space (線形の間隔) の略。

関数

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

# [0, 1] で等間隔な値5個を持つ1次元配列を作成する。
a = np.linspace(0, 1, num=5, dtype=float)
print(a)  # [0.   0.25 0.5  0.75 1.  ]

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

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

numpy.logspace

指定区間 [base^start, base^stop] で対数スケールで num 個の等間隔の値を持つ1次元配列を作成する。
デフォルト (endpoint=True) では終点を含む。

関数

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

# 区間 [10**2, 10**3] で log スケールで
# 等間隔の4つの値を持つ配列を作成する。
a = np.logspace(2., 3., num=4)
print(a)  # [ 100.          215.443469    464.15888336 1000.        ]

# endpoint=False を指定すると、stop を含めない。
a = np.logspace(2., 3., num=4, endpoint=False)
print(a)  # [100.         177.827941   316.22776602 562.34132519]

# 区間 [2**2, 2**3] で log スケールで
# 等間隔の4つの値を持つ配列を作成する。
a = np.logspace(2., 3., num=4, base=2.)
print(a)  # [4.         5.0396842  6.34960421 8.        ]

numpy.geomspace

指定区間 [start, stop] で対数スケールで等間隔の値を持つ1次元配列を作成する。
デフォルト (endpoint=True) では終点を含む。

関数

numpy.geomspace(start, stop, num=50, endpoint=True, dtype=None)

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

# endpoint=False を指定すると、stop を含めない。
a = np.geomspace(100, 1000, num=4, endpoint=False)
print(a)  # [100.         177.827941   316.22776602 562.34132519]

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

numpy.meshgrid

格子状の配列を作成する。

関数

numpy.meshgrid(*xi, **kwargs)

例: 格子状の座標を表す2次元配列を作成する。

indexing='xy' (デフォルト) の場合、 xi は axis=1, axis=0 の順番で指定する。


xs = np.arange(4)
ys = np.arange(3)
X, Y = np.meshgrid(xs, ys)
print(X)
# [[0 1 2 3]
#  [0 1 2 3]
#  [0 1 2 3]]
print(Y)
# [[0 0 0 0]
#  [1 1 1 1]
#  [2 2 2 2]]

例: 格子状の座標を表す2次元配列を作成する。

indexing ='ij' の場合、xi は axis=0, axis=1 の順番で指定する。


rows = np.arange(4)
cols = np.arange(3)
R, C = np.meshgrid(rows, cols, indexing ='ij')
print(R)
# [[0 0 0]
#  [1 1 1]
#  [2 2 2]
#  [3 3 3]]
print(C)
# [[0 1 2]
#  [0 1 2]
#  [0 1 2]
#  [0 1 2]]

numpy.mgrid

格子状の2次元配列を作成する。

関数

numpy.mgrid = <numpy.lib.index_tricks.nd_grid object>

X, Y = np.mgrid[0:3,0:5]
print(X)
# [[0 0 0 0 0]
#  [1 1 1 1 1]
#  [2 2 2 2 2]]
print(Y)
# [[0 1 2 3 4]
#  [0 1 2 3 4]
#  [0 1 2 3 4]]

X, Y = np.mgrid[-5:5:2,-5:5:2]
print(X)
# [[-5 -5 -5 -5 -5]
#  [-3 -3 -3 -3 -3]
#  [-1 -1 -1 -1 -1]
#  [ 1  1  1  1  1]
#  [ 3  3  3  3  3]]
print(Y)
# [[-5 -3 -1  1  3]
#  [-5 -3 -1  1  3]
#  [-5 -3 -1  1  3]
#  [-5 -3 -1  1  3]
#  [-5 -3 -1  1  3]]