我对以非常规方式增加数字感兴趣。假设你正在这样倍增:
out = a * b * c * d
如果所有输入都是正数,所有输入都是负数,或者两个输入是正数而两个是负数(让我们忽略0), out
将是正数。
除了传统的数学运算外,我希望只有当所有输入都为正或所有输入都为负时,输出的符号才为正。否则,输出为负。
为标量实现这一点很简单,但我想用numpy进行逐元素向量乘法。是否有一种简单的方法可以在numpy中实现它?
答案 0 :(得分:1)
一种方法是分别计算绝对值和符号,如下所示:
import numpy as np
A = np.array([2,2,2,-2])
B = np.array([2,3,-2,-3])
C = np.array([2,-2,-4,-2])
D = np.array([2,5,2,-2])
M = abs(A*B*C*D)
S = np.sign(A) + np.sign(B) + np.sign(C) + np.sign(D)
M = np.where( (S==4) + (S==-4) ,M,-M)
print M
打印:
[ 16 -60 -32 24]
如果所有元素都是正数,则S等于4,如果所有元素都是负数,则等于-4。因此,在这些情况下,我们选择结果的正面版本,否则选择否定。