2015-10-06 44 views
2

我有一个三维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()

回答

2

三维堆叠中的每一层将意味着轴0axis=2中的每个索引合并为1。所以,解决你的情况,你可以使用np.sumnp.std沿着轴线01,像这样 -

sum_val = np.einsum('ijk->k',myArray) # k represents axis = 2 

采样运行 -

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

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

您还可以更有效地np.einsum进行求和 -

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.]) 
+0

太容易了......我知道会的。非常感谢你的时间,并向我介绍爱因斯坦总和......非常酷的东西。 – wookie