#python #numpy
Вопрос:
Я, кажется, не могу найти эффективного способа сделать это. Вопрос заключается в следующем: если я это сделаю coords = np.where(A==0)
, где A-это двумерный массив numpy, я получу кортеж из двух массивов np, массив, содержащий координаты x (точек, удовлетворяющих условию) и массив координат y, например, (array([0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3]), array([0, 1, 2, 3, 0, 1, 0, 1, 2, 3, 0, 1, 3]))
. Как я узнаю, существует ли, скажем, определенная точка (0,0)
в этом кортеже (без необходимости изменять кортеж в другую структуру)?
Комментарии:
1. Почему бы не спросить
A[0,0] == 0
?
Ответ №1:
Не используйте np.where
, если вам не нужны два массива индексов. A==0
вернет логический массив, который может быть именно тем, что вам нужно, если вам нужно проверить определенные индексы, чтобы убедиться, что проверка верна или нет.
mask = A==0 if mask[x,y]: # where x and y are set somewhere above... # do stuff
Конечно, если то, что вы делаете numpy
, связано, проверка одного индекса за раз, скорее всего, будет менее эффективной, чем какая-либо более широкая проверка, позволяющая выполнять широковещательную операцию. Например, вы можете изменить все 0
значения в массиве на 1
с помощью этого кода:
A[mask] = 1
Или это, что эквивалентно abs
(было бы более эффективно сохранить маску как отдельную переменную, но я не делаю этого в этом примере, чтобы показать, как это не совсем необходимо):
A[A lt; 0] = -A[A lt; 0]
Ответ №2:
Вы можете использовать argwhere
вместо where
, даже если это не оптимально (прочитайте ответ @Blccknght)
gt;gt;gt; (np.argwhere(A == 0) == [0, 0]).all(1).any() True