Pynote

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

numpy - インデックスを作成する関数

概要

numpy のインデックスを作成する関数を整理する。

名前 説明
numpy.s_ slice オブジェクトを作成する。
numpy.indices 指定した次元のインデックスを作成する。
numpy.ix_ 指定した各軸のインデックスから次元を合わせたインデックスを返す。
numpy.ravel_multi_index 多次元配列のインデックスを1次元配列にした場合のインデックスを返す。
numpy.unravel_index 1次元配列のインデックスを多次元配列にした場合のインデックスを返す。
numpy.mask_indices mask_func が生成する配列で0でない要素のインデックスを返す。
numpy.tril_indices 下三角要素のインデックスを返す。
numpy.tril_indices_from 指定した配列の下三角要素のインデックスを返す。
numpy.triu_indices 上三角要素のインデックスを返す。
numpy.triu_indices_from 指定した配列の上三角要素のインデックスを返す。
numpy.diag_indices 対角成分のインデックスを返す。
numpy.diag_indices_from 指定した配列の対角成分のインデックスを返す。

numpy.s_

slice オブジェクトを作成する。

関数

numpy.s_[start:stop:step]

print(np.s_[2:7:2])  # slice(2, 7, 2)
print(np.s_[1:4, 5:10])  # (slice(1, 4, None), slice(5, 10, None))

a = np.arange(10)
print(a[np.s_[2:7:2]])  # [2 4 6]

# a[2:7:2] と同じ
print(a[2:7:2])  # [2 4 6]

numpy.indices

指定した次元のインデックスを作成する。

関数

numpy.indices(dimensions, dtype=<class 'int'>)

X_indices, Y_indices = np.indices((2, 3))
print(X_indices)
# [[0 0 0]
#  [1 1 1]]

print(Y_indices)
# [[0 1 2]
#  [0 1 2]]

numpy.ravel_multi_index

多次元配列のインデックスを1次元配列にした場合のインデックスを返す。

関数

numpy.ravel_multi_index(multi_index, dims, mode='raise', order='C')

indices = np.ravel_multi_index(([3, 6, 6], [4, 5, 1]), (7, 6))
print(indices)  # [22 41 37]

numpy.unravel_index

1次元配列のインデックスを多次元配列にした場合のインデックスを返す。

関数

numpy.unravel_index(indices, dims, order='C')

indices = np.unravel_index([22, 41, 37], (7, 6))
print(indices)
# (array([3, 6, 6]),
#  array([4, 5, 1]))

numpy.tril_indices

下三角要素のインデックスを返す。

関数

numpy.tril_indices(n, k=0, m=None)

print(np.tril_indices(3))
# (array([0, 1, 1, 2, 2, 2]),
#  array([0, 0, 1, 0, 1, 2]))

print(np.tril_indices(3, k=1))
# (array([0, 0, 1, 1, 1, 2, 2, 2]),
#  array([0, 1, 0, 1, 2, 0, 1, 2]))

print(np.tril_indices(3, k=-1))
# (array([1, 2, 2]),
#  array([0, 0, 1]))

numpy.tril_indices_from

指定した配列の下三角要素のインデックスを返す。

関数

numpy.tril_indices_from(arr, k=0)

a = np.random.randn(3, 3)

print(np.tril_indices_from(a))
# (array([0, 1, 1, 2, 2, 2]),
#  array([0, 0, 1, 0, 1, 2]))

print(np.tril_indices_from(a, k=1))
# (array([0, 0, 1, 1, 1, 2, 2, 2]),
#  array([0, 1, 0, 1, 2, 0, 1, 2]))

print(np.tril_indices_from(a, k=-1))
# (array([1, 2, 2]),
#  array([0, 0, 1]))

numpy.triu_indices

上三角要素のインデックスを返す。

関数

numpy.triu_indices(n, k=0, m=None)

print(np.triu_indices(3))
# (array([0, 0, 0, 1, 1, 2]),
#  array([0, 1, 2, 1, 2, 2]))

print(np.triu_indices(3, k=1))
# (array([0, 0, 1]),
#  array([1, 2, 2]))

print(np.triu_indices(3, k=-1))
# (array([0, 0, 0, 1, 1, 1, 2, 2]),
#  array([0, 1, 2, 0, 1, 2, 1, 2]))

numpy.triu_indices_from

指定した配列の上三角要素のインデックスを返す。

関数

numpy.triu_indices_from(arr, k=0)

a = np.random.randn(3, 3)

print(np.triu_indices_from(a))
# (array([0, 0, 0, 1, 1, 2]),
#  array([0, 1, 2, 1, 2, 2]))

print(np.triu_indices_from(a, k=1))
# (array([0, 0, 1]),
#  array([1, 2, 2]))

print(np.triu_indices_from(a, k=-1))
# (array([0, 0, 0, 1, 1, 1, 2, 2]),
#  array([0, 1, 2, 0, 1, 2, 1, 2]))

numpy.diag_indices

対角成分のインデックスを返す。

関数

numpy.diag_indices(n, ndim=2)

print(np.diag_indices(3))
# (array([0, 1, 2]),
#  array([0, 1, 2]))

print(np.diag_indices(3, ndim=3))
# (array([0, 1, 2]),
#  array([0, 1, 2]),
#  array([0, 1, 2]))

numpy.diag_indices_from

指定した配列の対角成分のインデックスを返す。

関数

numpy.diag_indices_from(arr)

a = np.random.randn(3, 3)
print(np.diag_indices_from(a))
# (array([0, 1, 2]),
#  array([0, 1, 2]))

a = np.random.randn(3, 3, 3)
print(np.diag_indices_from(a))
# (array([0, 1, 2]),
#  array([0, 1, 2]),
#  array([0, 1, 2]))