从两个NumPy数组中总结正负元素

时间:2015-05-22 15:42:04

标签: python numpy multidimensional-array lambda

>>> x1
array([[ 0.,  -1.,   2.],
       [ 3.,  -4.,  2.],
       [ -2.,  1.,  -8.]])

>>> x3
array([[ 0.,  -5.,  2.],
       [ 3.,  0.,  -3.],
       [ 3.,  2.,  8.]])

我需要输出两个matricies:ST,这样X就是XY中所有正值的总和, TXY中所有负值的总和。

例如:

      S = array([   [ 0.,  0.,  4.],
                    [ 6.,  0.,  2.],
                    [ 3.,  3.,  8.]])

      T = array([   [ 0.,  -6.,  0.],
                    [ 0.,  -4.,  -3.],
                    [ -2.,  0.,  -8.]])  

我正在使用Python 2.6.7。

2 个答案:

答案 0 :(得分:2)

您可以使用np.clip()有选择地添加

In [140]: x1.clip(min=0) + x3.clip(min=0)
Out[140]:
array([[ 0.,  0.,  4.],
       [ 6.,  0.,  2.],
       [ 3.,  3.,  8.]])

In [141]: x1.clip(max=0) + x3.clip(max=0)
Out[141]:
array([[ 0., -6.,  0.],
       [ 0., -4., -3.],
       [-2.,  0., -8.]])

答案 1 :(得分:1)

clip一样,您可以通过乘以布尔数组来完成此操作:

>>> x1 * (x1 > 0) + x3 * (x3 > 0)
array([[ 0., -0.,  4.],
       [ 6.,  0.,  2.],
       [ 3.,  3.,  8.]])
>>> x1 * (x1 <= 0) + x3 * (x3 <= 0)
array([[ 0., -6.,  0.],
       [ 0., -4., -3.],
       [-2.,  0., -8.]])
>>>