Найдите координаты x, y в двух массивах np, содержащих X и Y

#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