2017-01-14 3 views
1

元のイメージ(形とdtypeが((1024, 1024, 3), dtype('uint8'))の場合)を最初に1D配列に変換して、その1D配列をトレーニングセットに1つの観測として入力できるようにします。pythonでイメージ行列を変形する

今、私はその1D配列を元の形式に変換したいと思います。

オリジナルイメージを1Dアレイに変換するために、numpyで利用可能なflatten()関数を使用しました。以下のコードである:

In[80]: t = misc.imread('b.png') #to read the image 

In[81]: t.shape, t.dtype 
Out[81]: ((1024, 1024, 3), dtype('uint8')) 

#To convert the above image into 1D array 

In[82]: t.flatten() 
Out[82]: array([ 5, 40, 121, ..., 130, 110, 89], dtype=uint8) 

今は元の行列(形状すなわち(1024,1024,3))に(t.flattern()起因)上記マトリクスを変換します。

私は何をすべきか教えてください。

アップデート: 私はt.flattenの形状を確認し、それが

In[86]: p=t.flatten() 
In[87]: p.shape 
Out[86]:(6291456,) 

しかし6291456 =(* 1024 1024 * 3 * )と出てきます。今、私はこの余分な言葉(すなわち)がどこから出てくるのか分かりません。

私もreshapeコマンドを使用しましたが、コマンドを実行するとエラーが出ます。使用reshape

l=p.reshape(1024,1024,3) 

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-89-b1ab41666df7> in <module>() 
----> 1 l=p.reshape(1024,1024,3) 

ValueError: total size of new array must be unchanged 
+0

ただ、 'reshape'? – Divakar

+0

@Divaker私はそれを使用しましたが、あいまいなエラーを表示します – Lok

+0

与えられた初期形状の配列に対して '(6291456、)'になる 'p.shape'を再現することはできません。 – akilat90

答えて

0

、所望の形状の

In [93]: a = np.zeros((10,10,3)) 
In [94]: a.shape 
Out[94]: (10, 10, 3) 

In [95]: b = a.flatten() 
In [96]: b.shape 
Out[96]: (300,) 

In [97]: c = b.reshape(10,10,3) 
In [98]: c.shape 
Out[98]: (10, 10, 3) 
+0

私は自分の問題を更新しました。もう一度見てください。 – Lok

関連する問題