Координаты элемента в массиве NumPy

У меня есть массив NumPy:

[[  0.   1.   2.   3.   4.]
 [  7.   8.   9.  10.   4.]
 [ 14.  15.  16.  17.   4.]
 [  1.  20.  21.  22.  23.]
 [ 27.  28.   1.  20.  29.]]

который я хочу быстро найти координаты конкретных значений и избежать петель Python в массиве. Например номер 4 включен:

row 0 and col 4
row 1 and col 4
row 2 and col 4

и функция поиска должна возвращать кортеж:

((0,4),(1,4),(2,4))

Можно ли это сделать напрямую через функции NunmPy?

Ответ 1

Если a - ваш массив, вы можете использовать:

ii = np.nonzero(a == 4)

или

ii = np.where(a == 4)

Если вы действительно хотите кортеж, вы можете преобразовать из кортежей массивов в кортеж кортежей, но возвращаемое значение из функций numpy является убедительным, а затем выполняет другие операции над вашим массивом.

Преобразование в кортеж для спецификации OP:

tuple(zip(*ii))

Ответ 2

a = numpy.array([[  0.,  1.,  2.,  3.,  4.],
                 [  7.,  8.,  9., 10.,  4.],
                 [ 14., 15., 16., 17.,  4.],
                 [  1., 20., 21., 22., 23.],
                 [ 27., 28.,  1., 20., 29.]])
print numpy.argwhere(a == 4.)

печатает

[[0 4]
 [1 4]
 [2 4]]

Используются обычные оговорки для сравнения с плавающей запятой.