#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. Спасибо за поправку, Би Рико. Я включил это в свой ответ.