Pynote

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

numpy - 指定した条件を満たすインデックスを取得する関数

一覧表

名前 説明
numpy.where 条件を満たすインデックスを返す。
numpy.argwhere 0でない要素のインデックスを返す。
numpy.argmax 最大値があるインデックスを返す。
numpy.argmin 最小値があるインデックスを返す。
numpy.nanargmax NaN を無視して、最大値があるインデックスを返す。
numpy.nanargmin NaN を無視して、最小値があるインデックスを返す。
numpy.nonzero 0でない要素のインデックスを返す。
numpy.flatnonzero 配列を1次元にした上で、0でない要素のインデックスを返す。
numpy.searchsorted ソート済みの配列で値を挿入する場所のインデックスを返す。
numpy.extract 条件を満たす要素だけを返す。
numpy.count_nonzero 0でない要素の数を返す。

numpy.where

  • numpy.where(condition): condition の値が0でない要素のインデックスを返す。
  • numpy.where(condition, x, y): condition の値が0でない場合は x、0 の場合は y の値を返す。

関数

numpy.where(condition[, x, y])

例 値が0でない要素のインデックスを取得する。

a = np.array([True, False, True, True, False])
print(np.where(a))  # (array([0, 2, 3]),)

a = np.array([[True,  False,  True],
              [True,  True,  False],
              [True, False,  True]])
print(np.where(a))
# (array([0, 0, 1, 1, 2, 2]),
#  array([0, 2, 0, 1, 0, 2]))

例 3項間演算子

x, y も指定した場合、condition の値が True の要素は x の値、False の要素は y の値を返す。

a = np.array([True, False, True, True, False])
b = np.array([1, 5, 2, 7, 3])
c = np.array([-1, -5, -2, -7, -3])

d = np.where(a, b, c)
print(d)  # [ 1 -5  2  7 -3]

numpy.argwhere

0でない要素のインデックスを返す。
np.transpose(np.nonzero(a)) と同じである。

関数

numpy.argwhere(a)

a = np.array([True, False, True, True, False])
print(np.argwhere(a))
# [[0]
#  [2]
#  [3]]

a = np.array([[True,  False,  True],
              [True,  True,  False],
              [True, False,  True]])
print(np.argwhere(a))
# [[0 0]
#  [0 2]
#  [1 0]
#  [1 1]
#  [2 0]
#  [2 2]]

numpy.argmax

最大値があるインデックスを返す。

関数

numpy.argmax(a, axis=None, out=None)

a = np.array([1, 5, 7, 5, 7])
print(np.argmax(a))  # 2

a = np.array([[-1, -2,  4],
              [-3,  7,  5],
              [0,  4,  5]])
print(np.argmax(a, axis=0))  # [2 1 1]
print(np.argmax(a, axis=1))  # [2 1 2]

numpy.argmin

最小値があるインデックスを返す。

関数

numpy.argmin(a, axis=None, out=None)

a = np.array([1, 5, 7, 5, 7])
print(np.argmax(a))  # 2

a = np.array([[-1, -2,  4],
              [-3,  7,  5],
              [0,  4,  5]])
print(np.argmin(a, axis=0))  # [1 0 0]
print(np.argmin(a, axis=1))  # [1 0 0]

numpy.nanargmax

NaN を無視して、最大値があるインデックスを返す。

関数

numpy.nanargmax(a, axis=None)

numpy.nanargmin

NaN を無視して、最小値があるインデックスを返す。

関数

numpy.nanargmin(a, axis=None)

numpy.nonzero

0でない要素のインデックスを返す。

関数

numpy.nonzero(a)

a = np.array([1, 0, 2, 0, 7])
print(np.nonzero(a))  # (array([0, 2, 4]),)

a = np.array([[-1, 0, 4],
              [-3, 7, 0],
              [0, 4, 5]])
print(np.nonzero(a))
# (array([0, 0, 1, 1, 2, 2]),
#  array([0, 2, 0, 1, 1, 2]))

numpy.flatnonzero

配列を1次元にした上で、0でない要素のインデックスを返す。

関数

numpy.flatnonzero(a)

a = np.array([1, 0, 2, 0, 7])
print(np.flatnonzero(a))  # [0 2 4]

a = np.array([[-1, 0, 4],
              [-3, 7, 0],
              [0, 4, 5]])
print(np.flatnonzero(a))
# [0 2 3 4 7 8]

numpy.searchsorted

ソート済みの配列で値を挿入する場所のインデックスを返す。

関数

numpy.searchsorted(a, v, side='left', sorter=None)

a = np.array([1, 3, 2, 5, 5, 7])

a_sorted = np.sort(a)
print(a_sorted)  # [1 2 3 5 5 7]

index = np.searchsorted(a_sorted, 3)
print(index)  # 2

index = np.searchsorted(a_sorted, [-1, 2, 4, 10])
print(index)  # [0 1 3 6]

例 side 引数を指定する場合

a = np.array([1, 3, 2, 5, 5, 7])

a_sorted = np.sort(a)
print(a_sorted)  # [1 2 3 5 5 7]

index = np.searchsorted(a_sorted, 5, side='left')
print(index)  # 3

index = np.searchsorted(a_sorted, 5, side='right')
print(index)  # 5

numpy.extract

条件を満たす要素だけを返す。

関数

numpy.extract(condition, arr)

a = np.array([[0,  1,  2,  3],
              [4,  5,  6,  7],
              [8,  9, 10, 11]])

condition = a % 3 == 0
print(condition)
# [[ True False False  True]
#  [False False  True False]
#  [False  True False False]]

b = np.extract(condition, a)
print(b)  # [0 3 6 9]

# array[condition] と同じ
print(a[condition])  # [0 3 6 9]

numpy.count_nonzero

0でない要素の数を返す。

関数

numpy.count_nonzero(a, axis=None)

a = np.array([1, 0, 2, 0, 7])
print(np.count_nonzero(a))  # 3

a = np.array([[-1, 0, 4],
              [-3, 7, 0],
              [0, 4, 5]])
print(np.count_nonzero(a))
# 6

例 axis を指定する場合

a = np.array([[-1, 1, 4],
              [-3, 7, 0],
              [0, 4, 5]])
print(np.count_nonzero(a, axis=0))  # [2 3 2]
print(np.count_nonzero(a, axis=1))  # [3 2 2]