3

任意の次元 (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 に一般化するにはどうすればよいですか?

4

1 に答える 1

2

1 つの方法は、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]]])

しかし、正直なところ、必要に応じてこれを関数にまとめることができます。

于 2012-10-15T20:34:17.500 に答える