在3-d堆栈的每一层上执行2-d操作

时间:2015-10-06 16:43:15

标签: python arrays numpy vectorization

我有一个三维numpy数组,例如RGB图像。

我想在数组的每一层上执行相同的二维操作;例如标准偏差或总和。

不使用for循环,是否有一个简单的numpy或scipy命令来执行操作,返回一个numpy数组?

例如: numpy数组的三层是:

myArray[:,:,0] = [[1,2],[3,4]] 
myArray[:,:,1] = [[0,0],[1,1]]  
myArray[:,:,2] = [[4,4],[4,4]] 

想象一个命令numpy.sumLayers()

numpy.sumLayers(myArray) = array([[10],[2],[16]])

或类似地numpy.standardDeviationLayers()

1 个答案:

答案 0 :(得分:2)

3D堆栈的每一层都意味着0中的每个索引都会合并1axis=2个轴。因此,为了解决您的问题,您可以沿轴01使用np.sumnp.std,就像这样 -

sum_val = myArray.sum(axis=(0,1))

std_val = myArray.std(axis=(0,1))

您还可以使用np.einsum -

更有效地执行求和
sum_val = np.einsum('ijk->k',myArray) # k represents axis = 2

示例运行 -

In [11]: myArray
Out[11]: 
array([[[ 1.,  0.,  4.],
        [ 2.,  0.,  4.]],

       [[ 3.,  1.,  4.],
        [ 4.,  1.,  4.]]])

In [12]: myArray.sum(axis=(0,1))
Out[12]: array([ 10.,   2.,  16.])

In [13]: myArray.std(axis=(0,1))
Out[13]: array([ 1.11803399,  0.5       ,  0.        ])

In [14]: np.einsum('ijk->k',myArray)
Out[14]: array([ 10.,   2.,  16.])