#python #numpy
Вопрос:
У меня есть два массива Numpy следующим образом:
>>> x
array([[0, 3, 3],
[3, 3, 3],
[0, 3, 3]])
>>> y
array([[0, 0, 0],
[0, 2, 2],
[0, 2, 2]])
Сравнивая x
и y
, я хотел бы, чтобы результат сравнения присваивал значения на основе следующих условий:
- Если значения
x
иy
не равны нулю, назначьте меньшее значение - Если
x
илиy
равно нулю, назначьте ненулевое значение - Если
x
иy
равно нулю, назначьте 0
Поэтому, ссылаясь на приведенный выше пример, я хотел бы, чтобы результат был:
>>> result
array([[0, 3, 3],
[3, 2, 2],
[0, 2, 2]])
Примечание: размер массива является переменным. Я взял 3 x 3
массив только в качестве примера. x
и y
все же будут такого же размера.
Как я могу выполнить эту операцию замены/назначения с помощью Numpy?
Ответ №1:
Вы можете использовать встроенный выбор для замены нескольких условий:
np.select([(x!=0)amp;(y!=0), (x==0)!=(y==0), (x==0)amp;(y==0)],[np.minimum(x,y), x y, 0])
выход:
array([[0, 3, 3],
[3, 2, 2],
[0, 2, 2]])
хотя вы можете перевести это множественное условие в одно условие и использовать дополнение для двух последних условий с одинаковым выводом:
np.where((x!=0)amp;(y!=0), np.minimum(x,y), x y)
Ответ №2:
Вот решение:
tmp = np.where(x == 0, y, x) # Rule 2 and 3
result = np.where((x != 0) amp; (y != 0), np.minimum(x, y), tmp) # Rule 1
Вывод в result
:
array([[0, 3, 3],
[3, 2, 2],
[0, 2, 2]])