np。乘以“哪里”条件有问题?

问题描述 投票:0回答:1

我必须逐个元素地将两个numpy数组相乘,而不是使用* b,我对使用np.multiply感兴趣,因为它具有“ where”选项,这将帮助我节省一些计算时间。实际上,我只对第三个数组c取值> 0的a * b感兴趣。

实际上,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选项的情况下返回正确的结果。

我必须逐个元素地将两个numpy数组相乘,而不是使用* b,我对使用np.multiply感兴趣,因为它具有“ where”选项,这将帮助我节省一些计算时间。在...

python arrays numpy matrix-multiplication
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.