2016-03-03 39 views
1

在迭代多維數組特定子陣列這是來自這裏Iterating and selecting a specific array from a multidimensional array in Python選擇和在Python

在該帖子的帖子一個問題,用戶@Cleb解決了什麼,這是我原來的問題:如何執行總和通過在3D陣列列:

import numpy as np 
arra = np.arange(16).reshape(2, 2, 4) 

其給出

array([[[0, 1, 2, 3], 
    [4, 5, 6, 7]], 
    [[8, 9, 10, 11], 
    [12, 13, 14, 15]]]) 

,問題是如何在每個矩陣執行列的總和,也就是即,0 + 4,1 + 5,...,8 + 12,...,11 + 15.它由@Cleb解決。

然後我想知道如何在0 + 8,1 + 9,...,4 + 12,...,7 + 15(奇數和偶數列)也由@Cleb解決。

但後來我想知道是否有一個普遍的想法(可以在每個特定情況下進行修改)。想象一下,你可以將第一行和最後一行以及中間行分別添加到列中。 0 + 12,1 + 13,...,3 + 15,4 + 8,5 + 9,...,7 + 11.

有沒有一般的方法?謝謝。

回答

1

取決於究竟arra定義,可以適當使用np.roll改變你的價值觀:

arra_mod = np.roll(arra, arra.shape[2]) 

arra_mod然後看起來如下:

array([[[12, 13, 14, 15], 
     [ 0, 1, 2, 3]], 

     [[ 4, 5, 6, 7], 
     [ 8, 9, 10, 11]]]) 

現在,你可以簡單地從使用命令你的previous question得到你想要的輸出:

map(sum, arra_mod) 

它給你所需要的輸出:

[array([12, 14, 16, 18]), array([12, 14, 16, 18])] 

您也可以使用列表理解

[sum(ai) for ai in arra_mod] 

它給你同樣的輸出。

如果你喜歡一個內膽,你可以因此簡單地做:

map(sum, np.roll(arra, arra.shape[2]))