2012-10-15 51 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