2017-01-10 4 views
2

配列(1800,144)a[0:900,:]がすべて実数で、配列の後半がすべてゼロである配列(a)を持っています。配列の後半部分を水平方向に配置して、新しい配列形状(a)が(900,288)になり、配列aが次のようになります:np.reshapeを使って特定の順序で配列を再構成するPython

[[1,2,3,......,0,0,0], 
[1,2,3,......,0,0,0], 
... 
] 
それが意味をなされるならば

np.reshape(a,(900,288))を使用しようとすると、私がしたいことを正確に行えません。配列はすべてa[0:450,:]からまでの0になります。 a[0:900,0:144]はすべて実数で、a[0:900,144:288]はすべてゼロになるように、すべてのゼロを第2次元に固定します。

これを行う簡単な方法はありますか?

答えて

1

次の2つの配列を連結するためにnumpy.hstack()を使用することができます。

import numpy as np 
np.hstack([a[0:900,], a[900:1800,]]) 

をあなたが二つ以上のサブ配列に配列を分割したい場合は、あなたがnp.splitnp.hstackの使用を組み合わせることができ、 @ HM14さんのコメント:

np.hstack(np.split(a, n)) # assuming len(a) % n == 0 here 
+0

元の配列を2に分割して水平に連結したいのですが、ここで説明したものより大きな配列を分割すると言うと、これを使うことができます。 500を水平に連結しますか? np.hstackを何度も使用することなくこれを行う簡単な方法はありますか?多分ループか何か? – HM14

+0

一つのオプションは 'functools'から' reduce'関数を使うことですが、確かにforループを使って結果を一つ一つ連結することもできます。 – Psidom

+0

np.splitとhstackを組み合わせて使用​​するのは同じことでしょうか? x = np.split(x、2) '(2,900,144)の形を与え、次に' x = np.split(x、2) 'の形を与える' np.hstack(x) 'は'(900,288) 'のxa形を与えます。これが同じ場合は、xをこのように任意の数に分割できますか? – HM14

1

申し訳ありませんが、これはコメントのために大きすぎますので、ここで投稿します。 長いアレイがあり、それを分割して再構成する必要がある場合は、これを達成できる他の方法があります。この例では、同じサイズの数値シーケンスを1つの配列にアセンブルする方法を示します。

a = np.arange(100) 
>>> b = np.split(a,10) 
>>> c = np.c_[b] 
>>> c 
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, 75, 76, 77, 78, 79], 
     [80, 81, 82, 83, 84, 85, 86, 87, 88, 89], 
     [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]) 

このように、シーケンスを簡単に分割して簡単に再アセンブルすることができます。必要に応じて積み重ね順序を変更することができます。おそらく、このシーケンスで表示する方が簡単でしょう。

d = np.r_[b[5:],b[:5]].ravel() 
>>> d 
array([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, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 
     86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 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]) 

この例では、最後の5つの分割シーケンスを取り、それらをパイルの前面にスローすることができます。 長さが違う一連の値を持っていても、それらをリストに入れて、np.c_とnp.r_便利関数を使って再アセンブルすることができます(np.c_は通常通り等しいサイズの配列が必要です)。

おそらく特定のケースに対する解決策ではありませんが、さまざまな方法でサンプルを再構成する方法に関するいくつかの提案があります。

関連する問題