2016-04-18 9 views
2

n次元の配列(nは原則として不明ですが、実際には小さい番号ですが、通常n<=3)です。私は各方向にすべてのm番目のエントリをサブサンプルしたいと思います。だから、2次元配列のために、これは任意の次元数のサブサンプリングnumpy配列

arr[::m, ::m] 

任意nにこれを一般化する方法はありでしょうか? (実際には、私は値をチェックし、上記の異なるバージョンを使用することができますが、よりエレガントな方法があると思われます)。

答えて

4

使用スライス:

In [1]: import numpy as np 

In [2]: a = np.array(range(3*5*5)).reshape(3, 5, 5) 

In [3]: a 
Out[3]: 
array([[[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24]], 

     [[25, 26, 27, 28, 29], 
     [30, 31, 32, 33, 34], 
     [35, 36, 37, 38, 39], 
     [40, 41, 42, 43, 44], 
     [45, 46, 47, 48, 49]], 

     [[50, 51, 52, 53, 54], 
     [55, 56, 57, 58, 59], 
     [60, 61, 62, 63, 64], 
     [65, 66, 67, 68, 69], 
     [70, 71, 72, 73, 74]]]) 

In [4]: a[::2, ::2, ::2] 
Out[4]: 
array([[[ 0, 2, 4], 
     [10, 12, 14], 
     [20, 22, 24]], 

     [[50, 52, 54], 
     [60, 62, 64], 
     [70, 72, 74]]]) 

In [5]: a[[slice(None, None, 2)] * a.ndim] 
Out[5]: 
array([[[ 0, 2, 4], 
     [10, 12, 14], 
     [20, 22, 24]], 

     [[50, 52, 54], 
     [60, 62, 64], 
     [70, 72, 74]]]) 
関連する問題