2016-11-18 6 views
0

3つの等しい次元のnumpy配列があります。リストとして複数のnumpy ndarraysを結合します

私は3つすべてのデータを同じ寸法とサイズの配列に格納したいと考えています。 これを行うには、配列にアイテムごとに3バイトの情報を格納したいと思います。私はこれがリストであると仮定します。

複合アレイを作る

>>>red = np.array([[150,25],[37,214]]) 
>>>green = np.array([[190,27],[123,231]]) 
>>>blue = np.array([[10,112],[123,119]]) 

インサート組み合わせ魔法それぞれが2×2であり、開始のためにRGB

>>>RGB 
array([(150,190,10),(25,27,112)],[(37,123,123),(214,231,119)]) 

答えて

1

と呼ばれます。 と同じ構成で、arrayのリストにまとめられて、3x2x2を生成します。

In [344]: red = np.array([[150,25],[37,214]]) 
In [345]: green = np.array([[190,27],[123,231]]) 
In [346]: blue = np.array([[10,112],[123,119]]) 
In [347]: np.array([red,green,blue]) 
Out[347]: 
array([[[150, 25], 
     [ 37, 214]], 

     [[190, 27], 
     [123, 231]], 

     [[ 10, 112], 
     [123, 119]]]) 
In [348]: _.shape 
Out[348]: (3, 2, 2) 

これは、あなたが望む秩序ではありませんが、私たちは容易に変形し、必要に応じて転置することができます。

ターゲット、[]

In [350]: np.array([[(150,190,10),(25,27,112)],[(37,123,123),(214,231,119)]]) 
Out[350]: 
array([[[150, 190, 10], 
     [ 25, 27, 112]], 

     [[ 37, 123, 123], 
     [214, 231, 119]]]) 
In [351]: _.shape 
Out[351]: (2, 2, 3) 

の追加セットとそうtransposeで末端に3形状を移動してみ:

In [352]: np.array([red,green,blue]).transpose(1,2,0) 
Out[352]: 
array([[[150, 190, 10], 
     [ 25, 27, 112]], 

     [[ 37, 123, 123], 
     [214, 231, 119]]]) 

========== =================

私はstackを提案していたはずです。この新しいバージョンのconcatenateでは、異なる次元の配列に結合することができます。 axis=0の場合、np.arrayのように動作します。この式は、彼らが同じであることを除いて、など、redの形状については何も想定していないことを

In [467]: np.stack((red,green,blue),axis=-1) 
Out[467]: 
array([[[150, 190, 10], 
     [ 25, 27, 112]], 

     [[ 37, 123, 123], 
     [214, 231, 119]]]) 
In [468]: _.shape 
Out[468]: (2, 2, 3) 

注:しかしrgb次元の最後の使用を入れて、最後に参加します。したがって、3D配列でも動作します。

+0

ありがとうhpaulj、それはいいようです。赤、緑、青の配列が3次元である場合、つまり2x2x2で始まる場合は、どのような配列を組み合わせるのですか? – kabammi

+0

3d配列でもうまくいくはずのnp.stackという例を追加しました。 – hpaulj

+0

輝かしいhpaulj、あなたは伝説です! – kabammi

関連する問題