2016-05-27 15 views
0

私は3次元配列を持ち、最初の2次元で分割したい(最後の要素をすべて選択する)。 numpyを使用して簡単な方法ができますか?numpyを使用してND配列を分割する

例:配列

a = 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]]]) 

与えられた私は

a[0:2, 0:2, :], a[2:3, 2:3, :] 

,:例えば、(最後の1のすべての要素を保持したまま)最初の2つの軸でそれNの方法を分割したいと思います。しかしそれは均等に分割する必要はありません。 numpy.array_splitのように見えますが、すべて軸に分割されますか?

+0

詳細については、ここで説明しているように質問が完了していることを確認してください。http://stackoverflow.com/help/mcve完全な質問については、より早く、より良い回答を得ることができます。 – tfv

+0

例がありますか? – VICTOR

+0

'split'と' array_split'の問題は、それらが1軸でしか動作しないということです。結果はサブアレイのリストになります。 – hpaulj

答えて

0
In [179]: np.array_split(a,2,0) 
Out[179]: 
[array([[[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8]], 

     [[ 9, 10, 11], 
     [12, 13, 14], 
     [15, 16, 17]]]), 
array([[[18, 19, 20], 
     [21, 22, 23], 
     [24, 25, 26]]])] 

あなたはそれらの2つのアレイ上のループ[a[:2,:,:], a[2:,:,:]]

と同じ可能性があり、次軸上の分割を適用します。

In [182]: a2=[np.array_split(aa,2,1) for aa in a1] 

In [183]: a2 # edited for clarity 
Out[183]: 
[[array([[[ 0, 1, 2], 
      [ 3, 4, 5]], 
     [[ 9, 10, 11], 
      [12, 13, 14]]]), # (2,2,3) 
    array([[[ 6, 7, 8]], 
     [[15, 16, 17]]])], # (2,1,3) 

[array([[[18, 19, 20], 
      [21, 22, 23]]]), # (1,2,3) 
    array([[[24, 25, 26]]])]] # (1,1,3) 

In [184]: a2[0][0].shape 
Out[184]: (2, 2, 3) 

In [185]: a2[0][1].shape 
Out[185]: (2, 1, 3) 

In [187]: a2[1][0].shape 
Out[187]: (1, 2, 3) 

In [188]: a2[1][1].shape 
Out[188]: (1, 1, 3) 

各次元で不均一な配列に分割される可能性があるため、完全なベクトル化された形式ではこれを実行することは困難です。たとえ分割があったとしても、値が連続していないため、この種のグリッド分割を行うのは難しいです。この例では、最初のサブ配列に59の間にギャップがあります。

0

簡単なリスト内包表記は、これはリストのリスト、あなたが探している配列を含んでいるの項目になりますトリック

[np.array_split(arr, 2, axis=1) 
for arr in np.array_split(a, 2, axis=0)] 

を行います。

関連する問題