非常规向量乘法与numpy

时间:2015-10-17 19:45:34

标签: python algorithm math numpy scipy

我对以非常规方式增加数字感兴趣。假设你正在这样倍增:

out = a * b * c * d
如果所有输入都是正数,所有输入都是负数,或者两个输入是正数而两个是负数(让我们忽略0),

out将是正数。

除了传统的数学运算外,我希望只有当所有输入都为正或所有输入都为负时,输出的符号才为正。否则,输出为负。

为标量实现这一点很简单,但我想用numpy进行逐元素向量乘法。是否有一种简单的方法可以在numpy中实现它?

1 个答案:

答案 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。因此,在这些情况下,我们选择结果的正面版本,否则选择否定。