2017-04-04 12 views
0

現在、私はndarrayをより小さなndarraysに分割する方法を探しています。リストに格納されたより小さいndarrayに分割する

例:与えられたndarrayの形状(78,1440,3)から、サイズ(78,72,3)のより小さいndarrayのリストを抽出したい、それは20個のより小さなサブndarraysになります。

numpy.splitを使ってみました。

長さ72 のリストを生成し、最初のエントリは、形状(78,20,3)を持っている
numpy.split(matrix,72,axis=1) 

..

なぜ私は私が必要とするサイズを抽出することができないのですか? split

+0

リストまたは '配列'の中で? –

+1

'72 'は**要素数であるため、**に分割します。 –

答えて

1

72は、要素のに分割するため、分割されない寸法(軸による)のサイズあります。

ただし使用することができます。

numpy.split(matrix,matrix.shape[1]//72,axis=1)

を(自分の与えられた場合の)長さ72の20個の要素に分割します。 shape[1]が72で割り切れることを確認する必要があります。そうでないと、ValueErrorが発生します。

0

アプローチ#1:あなたはまさにこの作業のために作られたnp.hsplit使用することができます -

np.hsplit(arr,20) # creates list of 20 arrays 

サンプル実行 -

1)入力配列:

In [52]: a = np.random.randint(0,9,(2,6,3)) 

In [53]: a 
Out[53]: 
array([[[7, 8, 8], 
     [7, 7, 1], 
     [1, 6, 4], 
     [6, 3, 8], 
     [4, 7, 4], 
     [0, 6, 3]], 

     [[0, 8, 5], 
     [2, 2, 8], 
     [6, 0, 7], 
     [5, 4, 6], 
     [4, 3, 1], 
     [8, 6, 6]]]) 

2)分割軸を= 1に3部分になるので、各部分/部分配列はb長さが(2,2,3)のeです。

In [55]: b[0] 
Out[55]: 
array([[[7, 8, 8], 
     [7, 7, 1]], 

     [[0, 8, 5], 
     [2, 2, 8]]]) 

In [56]: b[1] 
Out[56]: 
array([[[1, 6, 4], 
     [6, 3, 8]], 

     [[6, 0, 7], 
     [5, 4, 6]]]) 

In [57]: b[2] 
Out[57]: 
array([[[4, 7, 4], 
     [0, 6, 3]], 

     [[4, 3, 1], 
     [8, 6, 6]]]) 

アプローチ#2: -

このタスクのためのもう1つのツールが np.array_splitだろう手動でそれらの部分を確認)

In [54]: b = np.hsplit(a,3) 

3:したがって、我々はこれらの3つのアレイのリストを取得します

np.array_split(arr,20,axis=1) 
関連する問題