任意维度的numpy数组切片

时间:2012-10-15 20:21:18

标签: python numpy dimension

假设我创建了一个任意维度(n)的数组。

#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.]]])

如何将语法的0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0部分推广为n?

1 个答案:

答案 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]]])

我想你可以摆脱硬编码的...... ..

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

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

但说实话,如果需要,我可能只是把它包装成一个函数。