2012-10-15 75 views
3

說我創建了一個任意維數組(n)。用任意維數切片的numpy數組

#assign the dimension 

>>> n=22 

#create the numpy array 

>>> TheArray=zeros([2]*n) 

>>> shape(TheArray) 

(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2) 

有一些代碼(在本例中跳過)來填充所述陣列的值。

現在,嘗試訪問陣列

>>> TheArray[0:2,0:2,0:2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 

array([[[ 0., 0.], 
     [ 0., 0.]], 

     [[ 0., 0.], 
     [ 0., 0.]]]) 

的一些值如何讓推廣到n語法的0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0一部分?

回答

2

一種方法是使用numpy.s_

In [55]: m = arange(2**6).reshape([2]*6) 

In [56]: m.shape 
Out[56]: (2, 2, 2, 2, 2, 2) 

In [57]: m[:2,:2,:2,0,0,0] 
Out[57]: 
array([[[ 0, 8], 
     [16, 24]], 

     [[32, 40], 
     [48, 56]]]) 

In [58]: m[s_[:2, :2, :2] + (0,)*(n-3)] 
Out[58]: 
array([[[ 0, 8], 
     [16, 24]], 

     [[32, 40], 
     [48, 56]]]) 

我想你可以擺脫硬編碼的-3 ..

In [69]: m[(s_[:2, :2, :2] + (0,)*m.ndim)[:m.ndim]] 
Out[69]: 
array([[[ 0, 8], 
     [16, 24]], 

     [[32, 40], 
     [48, 56]]]) 

但說實話,我很可能只是如果我需要的話,把它包裝在一個函數中。

+0

謝謝。 python和numpy的文檔不夠清楚,不能讓我得出這個結論,但是在提供了你的例子之後,我能夠拼湊python和numpy文檔來理解這一點。 – user1748155