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

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

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

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

2 Solutions collect form web for “Извлечь индексы массива, которые содержат определенное значение”

Вы можете использовать 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 
  • Как найти диаметр объектов с помощью обработки изображений в Python?
  • Сортировка массива numpy по второму столбцу, только если значения в первом столбце одинаковы
  • Передача процентилей в функцию pandas agg
  • найти временной сдвиг между двумя подобными сигналами
  • Python: слишком много индексов
  • Как вернуть все минимальные индексы в numpy
  • Cython: индексы unsigned int для массивов numpy дают разные результаты
  • среднее значение, nanmean и предупреждение: среднее значение пустого среза
  • Python - лучший язык программирования в мире.