2011-09-06 92 views
8

假設我已經定義與numpy的多維數組切片

x = numpy.arange(27).reshape((3, 3, 3)) 

現在3x3x3的numpy的陣列,我可以得到含有各3×3子陣列的(0,1)元素的數組與x[:, 0, 1],它返回array([ 1, 10, 19])。如果我有一個元組(m,n)並且想要檢索存儲在元組中的每個子數組((0,1))的(m,n)元素,該怎麼辦?例如,假設我有t = (0, 1)。我嘗試了x[:, t],但它沒有正確的行爲 - 它返回每個子陣列的行0和1。我找到的最簡單的解決方案是

x.transpose()[tuple(reversed(t))].transpose() 

但我確定必須有更好的方法。當然,在這種情況下,我可以做x[:, t[0], t[1]],但這不能推廣到我不知道有多少維數xt具有的情況。

回答

9

,你可以先創建索引記錄:

index = (numpy.s_[:],)+t 
x[index] 
+0

酷,謝謝幫助(你也是,wim)。我在[scipy](http://www.scipy.org/Numpy_Example_List)找到了更多s_和slice的示例。我想我以前看過那個清單,但沒有看到任何看起來相關的東西。 – James

4

HYRY的解決方案是正確的,但我一直覺得numpy的的r_c_s_指數技巧是一個有點奇怪的尋找。因此,這裏是使用slice對象完成同樣的事情:

x[(slice(None),) + t] 

這一個參數切片是停止位置(即None意味着所有在同樣的方式,x[:]相當於x[None:None]