2016-06-13 7 views
2

私は画像を作成しており、numpyを使用しています。 そのようなものを試しましたが、エラーが発生しました data = np.zeros(pic.size [0]、pic.size [1]、2)、dtype = [[(0,0,0)]、]) 私はそれがゼロで初期化されるタプルの行列を作成する方法

[[(0,0,0),(0,0,0),(0,0,0)],[(0,0,0),(0,0,0)]] 

私はそれをどのように行うことができますように見えるようにしようとしていますか?私はタプルの行列を得るputdata()メソッド にこのデータを入れる必要があります。

答えて

0

あなたはNumPy array of zerosを作成することができますが、そうのように、ループcomrehensionでタプルするためにそれらを3rd indexでそれを分割して、map -

split_zeros = np.split(np.zeros((5,3),dtype=int),[3],axis=0) 
out = [map(tuple,item) for item in split_zeros] 

サンプル実行 -

In [166]: split_zeros = np.split(np.zeros((5,3),dtype=int),[3],axis=0) 

In [167]: [map(tuple,item) for item in split_zeros] 
Out[167]: [[(0, 0, 0), (0, 0, 0), (0, 0, 0)], [(0, 0, 0), (0, 0, 0)]] 
1

私はあなたの最初のテストラインエラーが発生する

In [156]: data=np.zeros((3,4,2),dtype= [[(0,0,0)],]) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-156-9f6f75b73353> in <module>() 
----> 1 data=np.zeros((3,4,2),dtype= [[(0,0,0)],]) 

TypeError: data type not understood 

その式はあなたのために実行されるかどうか?あなたはそれがそうであるように聞こえるようにします。そうでない場合は、エラーについて明確にする必要があります。

しかし、タプルの行列は正確にはどういう意味ですか?表示するだけのもの

[[(0,0,0),(0,0,0),(0,0,0)],[(0,0,0),(0,0,0)]] 

putdataという方法があります。あなたはどんなパッケージについて話していますか?いいえnumpy

私はそれがタプル構文を使用しても技術的に、これは、タプルが含まれていないこの

In [158]: np.zeros((2,2),dtype='i,i,i') 
Out[158]: 
array([[(0, 0, 0), (0, 0, 0)], 
     [(0, 0, 0), (0, 0, 0)]], 
     dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4')]) 


In [159]: print(np.zeros((2,2),dtype='i,i,i')) 
[[(0, 0, 0) (0, 0, 0)] 
[(0, 0, 0) (0, 0, 0)]] 

のように表示される構造体配列を作成することができます。それをリストに変換するほうが良いかもしれません。

In [160]: np.zeros((2,2),dtype='i,i,i').tolist() 
Out[160]: [[(0, 0, 0), (0, 0, 0)], [(0, 0, 0), (0, 0, 0)]] 

この最後の結果は、タプルのリストのネストリストです。

内部要素がタプルであることは本当に重要ですか?

In [179]: np.zeros((2,2,3),int) 
Out[179]: 
array([[[0, 0, 0], 
     [0, 0, 0]], 

     [[0, 0, 0], 
     [0, 0, 0]]]) 

In [180]: np.zeros((2,2,3),int).tolist() 
Out[180]: [[[0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0]]] 

は、多くの場合、Pythonでリストやタプルは交換可能です。

そのputdataメソッドの詳細を知る必要があります。私はputdataPIL方法で検索から推測している

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

。その場合

、これは動作します:

In [240]: from PIL import Image 

In [241]: im=Image.new('RGB',(10,10))  
In [243]: im.putdata(np.ones((100,),dtype='i,i,i').tolist()) 

im.putdata(np.ones((10,10),dtype='i,i,i').tolist())は動作しません。データは

[(0,0,0),(0,1,0), etc] 

im.putdata([(0,1,0)]*100)フラットなリストである必要がありますように、それはタプルの単純なリストの複製であることからも、作品に見えます。

+0

ありがとう!私の主な問題は、putdataメソッドでフラットリストを使用すべきだったということでした。 – kipatbarzel1

関連する問題