2015-10-06 67 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