numpy.argwhere

numpy.argwhere(a)

Функция argwhere() возвращает индексы ненулевых элементов указанного массива.

Данная функция эквивалентна команде np.transpose(np.nonzero(a)).

Параметры:
a - массив NumPy или подобный массиву объект.
Исходный массив.
Возвращает:
ndarray - массив NumPy
массив индексов в котором каждый подмассив является индексом соответствующего ненулевого элемента в исходном массиве.
Смотрите так же:
flatnonzero, nonzero, where


Примеры

>>> import numpy as np
>>> 
>>> a = np.random.randint(1, 11, 10)
>>> a
array([ 4,  5,  8,  5,  5, 10,  6,  2,  3,  4])
>>> 
>>> ind = np.argwhere((a < 7) & (a > 2))
>>> ind
array([[0],
       [1],
       [3],
       [4],
       [6],
       [8],
       [9]], dtype=int32)

Возвращаемые массивы, крайне неудобны для индексирования, но зато индекс каждого ненулевого элемента сгруппирован в отдельный подмассив:

>>> a = np.random.randint(1, 11, size = (2, 6))
>>> a
array([[ 5,  6,  9,  1, 10,  8],
       [10,  7,  8,  9,  5,  2]])
>>> 
>>> a[a < 6] = 0
>>> a
array([[ 0,  6,  9,  0, 10,  8],
       [10,  7,  8,  9,  0,  0]])
>>> 
>>> ind = np.argwhere(a)
>>> ind
array([[0, 1],
       [0, 2],
       [0, 4],
       [0, 5],
       [1, 0],
       [1, 1],
       [1, 2],
       [1, 3]], dtype=int32)
>>> 
>>> for i in ind:
...     print(i, '-->', a[i[0], i[1]])
... 
[0 1] --> 6
[0 2] --> 9
[0 4] --> 10
[0 5] --> 8
[1 0] --> 10
[1 1] --> 7
[1 2] --> 8
[1 3] --> 9