2013-01-23 14 views
25

の配列をリシェイプ:以下の形式(一例)のアレイを考えるnumpyの

[[ 0 1] 
[ 2 3] 
[ 4 5] 
[ 6 7] 
[ 8 9] 
[10 11] 
[12 13] 
[14 15] 
[16 17]] 

それは形状があるのです[9,2]。

[[ 0 6 12] 
[ 2 8 14] 
[ 4 10 16]] 
[[ 1 7 13] 
[ 3 9 15] 
[ 5 11 17]] 

最も明白な(かつ確実に「非神託」)ソリューションはゼロの配列を初期化することです。今、私は[3,3]、このように各列の形状になるように配列を変換したいです適切なディメンションで2つのfor-loopsを実行します。ここでは、データが格納されます。 `` b.reshape(9、2):私は、言語に準拠しているソリューションに興味がある...それは場所に再形成することができないことを意味 'B'が今連続していないことを

答えて

40
a = np.arange(18).reshape(9,2) 
b = a.reshape(3,3,2).swapaxes(0,2) 

# a: 
array([[ 0, 1], 
     [ 2, 3], 
     [ 4, 5], 
     [ 6, 7], 
     [ 8, 9], 
     [10, 11], 
     [12, 13], 
     [14, 15], 
     [16, 17]]) 


# b: 
array([[[ 0, 6, 12], 
     [ 2, 8, 14], 
     [ 4, 10, 16]], 

     [[ 1, 7, 13], 
     [ 3, 9, 15], 
     [ 5, 11, 17]]]) 
+15

注意、同じデータのビューではなくコピーを返し、 'b.shape =(9、2)'が発生し、エラーになります。 – Jaime

+3

非常に重要な@Jaimeのコメントです.Shapeのポイントは、クローンなしで楽観的なサイズ変更を可能にすることです。膨大なデータセットを扱う – deepelement

関連する問題