【发布时间】:2020-08-23 00:00:42
【问题描述】:
我必须将两个 numpy 数组相乘,逐个元素,并且,我对使用 np.multiply 感兴趣,而不是使用 a * b,因为它的“where”选项,这应该可以帮助我节省一些计算时间。事实上,我只对 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 选项的情况下返回正确的结果。
【问题讨论】:
-
在其他 SO 中,我们发现您需要提供
out和where。当前的np.multiply文档对此非常清楚;不知道最近有没有改过。
标签: python arrays numpy matrix-multiplication