我必须逐个元素地将两个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”选项,这将帮助我节省一些计算时间。在...