Мне нужно умножить два массива numpy поэлементно, и вместо использования a * b я заинтересован в использовании np.multiply из-за его опции «где», которая должна помочь мне сэкономить некоторые вычислительные ресурсы. время. Фактически, меня интересует a * b только тогда, когда третий массив, c, принимает значения> 0.
Фактически, a, b и c принимают значения только в {0,1 }, поэтому они являются массивами "int8", и все они имеют размерность> 3.
Итак, я установил np.multiply (a, b where = c), а c изменен на тип данных "bool ". Иногда кажется, что функция работает, но иногда она выдает абсолютно бессмысленные числа в некоторых записях, например, 123 или -42 или что-то еще. Пытаясь выяснить, почему, у меня также был этот вывод с некоторыми меньшими массивами:
a,b = np.random.choice(10,size=(4,4)),np.random.choice(10,size=(4,4))
c = np.random.choice(2,size=(4,4)).astype("bool")
a
> array([[9, 6, 5, 0],
[6, 3, 7, 9],
[0, 4, 0, 7],
[1, 9, 1, 9]])
b
> array([[9, 9, 2, 7],
[8, 6, 2, 4],
[7, 9, 6, 5],
[8, 4, 1, 0]])
c
> array([[ True, True, True, False],
[ True, True, True, False],
[ True, False, True, False],
[False, True, True, True]])
np.multiply(a,b,where=c)
> array([[81, 54, 10, 1],
[48, 18, 14, 1],
[ 0, 1, 0, 1],
[ 1, 36, 1, 0]])
Где c - «False», результат не 0, а 1.
Что Что-то не так с этой функцией?
РЕДАКТИРОВАТЬ: Я указываю, что в моем приложении функции, a и b не имеют одинаковой формы, но умножение все еще возможно и, без опции where, возвращает правильный результат .