2016-05-17 12 views
0

Ich habe eine Liste von numpy Arrays, von denen jedes von einem Bild sind, daher sind sie dreidimensional (Höhe, Breite, Kanal). Ich muss wissen, an welchen (r, w, c) Punkten diese gleich sind.Was ist der schnellste Weg, um herauszufinden, wo eine Liste von numpy Arrays gleich ist?

EDIT: Mehr auf den Punkt, ich versuche herauszufinden, wo diese Bilder abweichen. Wenn es einen besseren Weg gibt, das zu tun, wäre das auch gut.

+0

könnten Sie mit etwas Input und erwarteter Ausgabe ausarbeiten? –

Antwort

1

Ist das die Art von was Sie versuchen zu tun?

definieren zwei 3d ‚Bilder‘ (klein für Komfort):

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) 

Wenn wir nur daran interessiert, die Punkte sind, wo sie sich unterscheiden, und nicht die Farben, können wir all oder any gelten (ich werde lassen Sie, dass out) sortieren:

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) 

und verwenden where (oder nonzero) die Indizes dieser Punkte zu finden.

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)) 

Für mehrere Bilder konnten wir ‚Stack‘ sie und machen die gleiche Art von Gleichheit prüft

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) 

Wieder auf konzentriere ich mich, wie Sie Vergleiche über mehrere Dimensionen durchführen können.

Verwandte Themen