Извлечь индексы массива, которые содержат определенное значение

У меня есть массив с формой: (31777, 44, 44)

Его sum равна 31777.0, и каждая (44,44) сетка содержит только одну запись 1.0 в некоторых координатах.

Моя цель – получить массив формы (31777, 2), где 2 – координаты входа 1.0 в сетке. Неприятный способ сделать это – с циклом, но я ищу элегантное решение для этого.

Вы можете использовать numpy.where для поиска индексов элементов в многомерном массиве, например:

 import numpy as np arr = np.array([[[1,0],[0,0]], [[0,0],[1,0]], [[0,0], [0,1]]]) arr.shape # (3, 2, 2) np.array([coord for coord in zip(*np.where(arr == 1)[1:])]) # array([[0, 0], # [1, 0], # [1, 1]]) this is an array of shape (3,2) which contains coordinates of 1.0 entry. 

Первый ответ дал мне материал Google, чтобы найти то, что я считаю оптимальным:

 np.vstack(arr.nonzero()[1:][::-1]).T