2017-05-09 7 views
1

私は、深さ4の100x100のサイズの7画像を意味する形状の配列(7,4,100,100)を持っています。私はmatplotlibの使用以下の試み:numpyの配列から複数の画像を1つのプロットで表示

input_arr=numpy.load(r'C:\Users\x\samples.npy') 

    for i, el in enumerate(input_arr): 
     #moving axis to use plt: i.e [4,100,100] to [100,100,4] 
     array2= numpy.moveaxis(input_arr[i],0,-1) 
     plt.subplot(3,3, i + 1), plt.imshow(array2[i]) 
    plt.show() 

のが左の画像が単一の画像と他の一つは、複数の画像のプロットである下図に示すようなプロットに画像を圧搾します。任意の解決法または他のアプローチ? enter image description here

+3

の形状を印刷することでこれを確認することができます。 – ozgur

+1

また、 'input_arr'の短い例を提供してください – Nuageux

+3

デバッグヘルプを求める質問(「なぜコードが動かないのですか?」)は[mcve]を提供する必要があります。この場合、実際には簡単ですが、ランダムなデータを使用するだけです。 – ImportanceOfBeingErnest

答えて

1

あなたはnp.moveaxisで軸を移動するとき、あなたはすでに、配列の唯一i番目のコンポーネントを取得するために、入力配列のインデックスを作成しました。したがって、imshowを使用する場合は、i番目ののインデックスをarray2とプロットする必要はありませんが、array2の全体をプロットする必要はありません。

for i, el in enumerate(input_arr): 
    #moving axis to use plt: i.e [4,100,100] to [100,100,4] 
    array2 = numpy.moveaxis(input_arr[i], 0, -1) 
    plt.subplot(3, 3, i + 1) 
    plt.imshow(array2)  # <- I changed this line 
plt.show() 

あなたはあなたのコード内のインデントの問題を修正してくださいarray2array2[i]

print array2.shape 
# (100, 100, 4) 
print array2[i].shape 
# (100, 4) 
関連する問題