2016-07-21 6 views
0

numpy ndarraysを特定の方法で再スタックする際に問題があります。私は列がお互いに隣接するように内側の2D行列を再スタックしたいです。私は、私はちょうどそれをうまくやる方法がわからない、np.hstackを知っておく必要があります知っていますかnumpy ndarrayを効率的に再スタック

>>> k.shape 
(2, 3, 3, 2) 
>>> k 
array([[[[ 7., 6.], 
     [ 7., 5.], 
     [ 5., 5.]], 

     [[ 2., 7.], 
     [ 5., 2.], 
     [ 7., 1.]], 

     [[ 9., 1.], 
     [ 7., 1.], 
     [ 2., 6.]]], 


     [[[ 5., 8.], 
     [ 9., 6.], 
     [ 3., 7.]], 

     [[ 8., 2.], 
     [ 2., 8.], 
     [ 4., 4.]], 

     [[ 8., 9.], 
     [ 5., 9.], 
     [ 2., 4.]]]], dtype=float32) 

:たとえば、これは私の入力された場合。ここでは、現在、私はそれをやっている方法ですが、これは私はそれが見えるようにしたいものです:あなたはこのようにそれを想像することができます

>>> np.array([np.hstack(j) for j in k]) 
array([[[ 7., 6., 2., 7., 9., 1.], 
    [ 7., 5., 5., 2., 7., 1.], 
    [ 5., 5., 7., 1., 2., 6.]], 

    [[ 5., 8., 8., 2., 8., 9.], 
    [ 9., 6., 2., 8., 5., 9.], 
    [ 3., 7., 4., 4., 2., 4.]]], dtype=float32) 

:私は寸法3×2の2枚の画像があり、各画像には、3つのチャネルを持っています。私は各画像のすべてのチャンネルを横に横に並べておきたい。

例がちょっと変わっても謝罪しますが、私が扱っているデータはこれより簡単にはなりません。

リストの理解は非常に遅いです。これを行うより速い方法がありますか?

ありがとうございます!

+2

ちょうどその所望の形状の再構築。 – Divakar

+0

整形は列を水平方向に再積み重ねることはないので、それは問題外です... –

+0

@Divakar、申し訳ありませんが、私の例は、私がやりたいことを伝えていないのでひどいものでした。私はそれが今より意味をなさないことを望む。私は特定の方法で列を再構築しようとしています。 –

答えて

1

我々はnp.transposeで軸を入れ替えた後、再構築することができます -

arr.transpose(0,2,1,3).reshape(2,3,-1) 
+1

ありがとう。私はあなたがこれにふさわしい信用を得られないと感じました。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅAhあなたの投稿に同じ内容があることに気がつきました。あまりにも遅い今私は推測する。 – Divakar