我有解決問題的有效解決方案,但是當(dāng)嘗試不同的事情時,我感到驚訝的是,找不到更好的解決方案了。歸結(jié)為創(chuàng)建一個靈活的dtype值以進(jìn)行比較并插入到數(shù)組中。我有一個RGB 24位圖像(每個R,G和B為8位)圖像陣列。事實(shí)證明,對于某些動作,最好將其用作具有HxWx3的3D數(shù)組,而其他時候最好將其用作具有dtype([[''R',uint8),('G',uint8)的結(jié)構(gòu)化數(shù)組,('B',uint8)])。一個示例是嘗試重新標(biāo)記圖像顏色,以便為每種唯一顏色賦予不同的值。我使用以下代碼執(zhí)行此操作:# Given im as an array of HxWx3, dtype=uint8from numpy import dtype, uint8, unique, insert, searchsortedrgb_dtype = dtype([('R',uint8),('G',uint8),('B',uint8)]))im = im.view(dtype=rgb_dtype).squeeze() # need squeeze to remove the third dimvalues = unique(im)if tuple(values[0]) != (0, 0, 0): values = insert(values, 0, 0) # value 0 needs to always be (0, 0, 0)labels = searchsorted(values, im)這可以很好地工作,但是我試圖使該if語句看起來更好,但卻找不到方法。因此,讓我們先看一下比較:>>> values[0](0, 0, 0)>>> values[0] == 0False>>> values[0] == (0, 0, 0)False>>> values[0] == array([0, 0, 0])False>>> values[0] == array([uint8(0), uint8(0), uint8(0)]).view(dtype=rgb_dtype)[0]True>>> values[0] == zeros((), dtype=rgb_dtype)True但是,如果您想要除(0,0,0)或(1,1,1)之外的其他東西,而又看上去又不是可笑的東西怎么辦?似乎應(yīng)該有一種更簡單的方法來構(gòu)造它,例如rgb_dtype.create((0,0,0))。接下來是insert語句,您需要為插入0 (0, 0, 0)。對于其他值,這實(shí)際上是行不通的,例如,插入(1, 2, 3)實(shí)際上是inserts (1, 1, 1), (2, 2, 2), (3, 3, 3)。因此,到底有沒有更好的方法?謝謝!
1 回答

jeck貓
TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個贊
我可以insert()
為您的案例做一些工作(請注意,而不是0
使用[0]
):
values = insert(values, [0], (1,2,3))
給予(例如):
array([(0, 1, 3), (0, 0, 0), (0, 0, 4), ..., (255, 255, 251), (255, 255, 253), (255, 255, 255)], dtype=[('R', 'u1'), ('G', 'u1'), ('B', 'u1')])
關(guān)于另一種處理方法if
,您可以執(zhí)行以下操作:
str(values[0]) == str((0,0,0))
或者,也許更強(qiáng)大:
eval(str(values[0])) == eval(str(0,0,0))
添加回答
舉報
0/150
提交
取消