Поиск в массиве Numpy на основе индекса массива

#python #search #numpy #conditional-statements

#python #Поиск #numpy #условные операторы

Вопрос:

У меня есть 2D-массив numpy, и я хотел бы изменить некоторые элементы на основе двух критериев: первый критерий — это условие. Второй критерий основан на индексе массива (номер строки и столбца)

Например, возьмем следующий код,

 import numpy as np
#Create an 8x8 array
A = np.arange(64).reshape(8,8)
condition = (A %2 ==0)
B = np.where(condition,0,A)
print B
 

Это работает, но я не хочу применять условие ко всему домену A. Я хочу применить условие только к заданному пользователем диапазону ячеек, скажем, к первым трем строкам и первым двум столбцам.

Как я могу изменить свой код для достижения этой цели?

Спасибо! ПК

Редактировать: обновленный код, основанный на предложении MathDan

 import numpy as np

#Create an 8x8 array
A = np.arange(64).reshape(8,8)
#Create boolean conditional array
condition = np.zeros_like(A,dtype='bool')
#Enforce condition on the first 4X4 matrix
condition[0:4, 0:4] = (A[0:4, 0:4] % 2 ==0)
B = np.where(condition,0,A)
print B
 

Комментарии:

1. Спасибо, Матдан. Это кажется настолько простым и интуитивно понятным, что я ругаю себя за то, что не подумал об этом. condition = zeros_like(A,dtype='bool') condition[0:2][0:1] = (A[0:2][0:1] % 2 ==0) B = np.where(condition,0,A)

Ответ №1:

Попробуйте (например):

 condition = np.zeros_like(A, dtype='bool')
condition[0:2, 0:1] = (A[0:2, 0:1] % 2 ==0)
 

Комментарии:

1. Я попробовал это сделать, но у меня ничего не получилось. Возможно, я что-то упускаю. состояние[0:2][0:1] = ( А[0:2][0:1] % 2 ==0) за которым следует C = np.где (условие, 0, A) дайте мне: ошибка несоответствия формы

2. Ладно, извини. Я пропустил строку: condition = zeros_like(A,dtype=’bool’)

3. A[0:2][0:1] это не то же самое A[0:2, 0:1] , что вы хотите получить второе. Первый будет индексироваться в первом измерении дважды.

4. Спасибо за поправку, Би Рико. Я включил это в свой ответ.