我正在創建一張圖片並使用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()方法 中。
我正在創建一張圖片並使用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()方法 中。
您可以創建一個NumPy array of zeros
,在3rd index
拆分,然後map
他們與循環comrehension元組,像這樣 -
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)]]
當我測試你的第一個行我得到一個錯誤
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
的方法。
===============
我從一個搜索是putdata
是PIL
方法猜測。
在這種情況下,這個工程:
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)
也適用,因爲它只是元組的簡單列表複製。
謝謝!我的主要問題是我應該在putdata方法中使用一個平面列表。 – kipatbarzel1