0
我有一個numpy數組的列表,每個數組都來自一個圖像,因此它們是三維的(高度,寬度,通道)。我需要知道哪些(r,w,c)點是平等的。找出numpy數組列表相等的最快方法是什麼?
編輯:更重要的是,我試圖找出這些圖像不同之處。如果有更好的方法來做到這一點,那也是一件好事。
我有一個numpy數組的列表,每個數組都來自一個圖像,因此它們是三維的(高度,寬度,通道)。我需要知道哪些(r,w,c)點是平等的。找出numpy數組列表相等的最快方法是什麼?
編輯:更重要的是,我試圖找出這些圖像不同之處。如果有更好的方法來做到這一點,那也是一件好事。
這是你想要做的事嗎?
定義兩個3D「影像」(小爲方便起見):
In [417]: img1=np.zeros((4,5,3),int); img2=np.zeros((4,5,3),int)
In [418]: img1[1:3,1:4,:]=[1,0,2] # different 'color' in the middle
In [419]: img2[1:3,1:4,:]=[2,1,0]
In [421]: img1!=img2
Out[421]:
array([[[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False]],
[[False, False, False],
[ True, True, True],
...,
[False, False, False]]], dtype=bool)
如果我們在它們之間的區別,而不是顏色的點只是有興趣,我們可以應用all
或any
(我會讓你整理了這一點):
In [422]: (img1!=img2).all(axis=2)
Out[422]:
array([[False, False, False, False, False],
[False, True, True, True, False],
[False, True, True, True, False],
[False, False, False, False, False]], dtype=bool)
,並使用where
(或nonzero
)找到這些點的指數。
In [423]: np.where((img1!=img2).all(axis=2))
Out[423]:
(array([1, 1, 1, 2, 2, 2], dtype=int32),
array([1, 2, 3, 1, 2, 3], dtype=int32))
對於多張圖片,我們可以「堆」他們,做同樣平等的測試
In [429]: imgs=np.array([img1,img2]) # 4d (2, 4, 5, 3)
In [430]: (imgs==imgs[0,...]).all(axis=0).all(axis=-1)
Out[430]:
array([[ True, True, True, True, True],
[ True, False, False, False, True],
[ True, False, False, False, True],
[ True, True, True, True, True]], dtype=bool)
再次聲明,我着重就如何跨多個維度進行比較。
你能否詳細說明一些輸入和預期輸出? –