Координаты элемента в массиве 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]]
Используются обычные оговорки для сравнения с плавающей запятой.