Python - 将numpy数组分解为正面和负面组件

时间:2017-01-25 04:47:41

标签: python arrays numpy

我有numpy形状的数组(600,600,3),其值为[-1.0,1.0]。我想将数组扩展为(600,600,6),其中原始值被分割为高于和低于0的数量。一些示例(1,1,3)数组,其中函数foo()执行操作:

>>> a = [-0.5, 0.2, 0.9]
>>> foo(a)
[0.0, 0.5, 0.2, 0.0, 0.9, 0.0]  # [positive component, negative component, ...]
>>> b = [1.0, 0.0, -0.3]  # notice the behavior of 0.0
>>> foo(b)
[1.0, 0.0, 0.0, 0.0, 0.0, 0.3]

1 个答案:

答案 0 :(得分:2)

使用切片将最小值/最大值分配给输出数组的不同部分

In [33]: a = np.around(np.random.random((2,2,3))-0.5, 1)

In [34]: a
Out[34]: 
array([[[-0.1,  0.3,  0.3],
        [ 0.3, -0.2, -0.1]],

       [[-0. , -0.2,  0.3],
        [-0.1, -0. ,  0.1]]])

In [35]: out = np.zeros((2,2,6))

In [36]: out[:,:,::2] = np.maximum(a, 0)

In [37]: out[:,:,1::2] = np.maximum(-a, 0)

In [38]: out
Out[38]: 
array([[[ 0. ,  0.1,  0.3,  0. ,  0.3,  0. ],
        [ 0.3,  0. ,  0. ,  0.2,  0. ,  0.1]],

       [[-0. ,  0. ,  0. ,  0.2,  0.3,  0. ],
        [ 0. ,  0.1, -0. ,  0. ,  0.1,  0. ]]])