Я следовал вашему коду, а np.where
вернул ожидаемый результат: кортеж с двумя одномерными массивами, содержащий индексы, в которых выполняется условие:
import numpy as np
h = np.random.uniform(size=(734, 814))
r1 = np.where(np.logical_and(h >= 0.1, h < 0.9))
print(r1[0].shape, r1[1].shape) # (478129,) (478129,)
Это означает, что 478129 элементов удовлетворяют условию.Для каждого из них r1 [0] будет иметь индекс строки, а r1 1 - индекс столбца.А именно, если r1
выглядит как
(array([ 0, 0, 0, ..., 733, 733, 733]), array([ 0, 1, 2, ..., 808, 809, 811]))
, то я знаю, что h[0, 0]
, h[0, 1]
, h[0, 2]
и т. Д. Удовлетворяют условиям: индекс строки происходит из первого массива, индекс столбцасо второго.Эта структура может быть менее читаемой, но ее можно использовать для индексации массива h
.
Транспонированная форма вывода более читабельна, так как представляет собой двумерный массив с индексными парами строка-столбец:
array([[ 0, 0],
[ 0, 1],
[ 0, 2],
...,
[733, 808],
[733, 809],
[733, 811]])
Его можно получить путем транспонирования r1
(если вам нужнотакже r1
) или напрямую с np.argwhere
:
r1 = np.argwhere(np.logical_and(h >= 0.1, h < 0.9))