2016-06-12 20 views
5

come devo confrontare più di 2 array di numpy?Confronto di più array di numpy

import numpy 
a = numpy.zeros((512,512,3),dtype=numpy.uint8) 
b = numpy.zeros((512,512,3),dtype=numpy.uint8) 
c = numpy.zeros((512,512,3),dtype=numpy.uint8) 
if (a==b==c).all(): 
    pass 

questo invia un ValueError, e io non sono interessato a confrontare le matrici due alla volta.

+2

"e non mi interessa comparare gli array due alla volta" - beh, è ​​l'opzione migliore che hai. – user2357112

+0

@ user2357112 che non sarebbe facile se ci sono molti array –

risposta

4

Per tre matrici, è possibile verificare l'uguaglianza tra gli elementi corrispondenti tra il primo e il secondo array e quindi il secondo e il terzo array per darci due scalari booleani e infine vedere se entrambi questi scalari sono True per l'output scalare finale, in questo modo -

np.logical_and((a==b).all(), (b==c).all()) 

per ulteriori numero di matrici, si potrebbe impilarli, ottenere la differenziazione lungo l'asse di impilamento e verificare se tutti di tali differenziazioni sono uguali a zero. Se lo sono, abbiamo uguaglianza tra tutti gli array di input, altrimenti no. L'implementazione sarebbe simile modo -

L = [a,b,c] # List of input arrays 
out = (np.diff(np.vstack(L).reshape(len(L),-1),axis=0)==0).all() 
+0

quale è la necessità di risagoma (len (L), - 1), funziona bene anche senza quello –

+0

@JayanthReddy No, non è così. Tale asse conterrebbe il primo asse dalle matrici di input fuse con l'asse di accatastamento. Quindi, abbiamo bisogno di dividere quell'asse in due con quella rimodellazione. Per chiarire con un esempio, prova con 'a = np.random.randint (0,9, (4,5,3)); b = a.copy(); c = a.copy() '. – Divakar

3

Per tre array, si dovrebbe davvero solo loro due confrontare alla volta:

if np.array_equal(a, b) and np.array_equal(b, c): 
    do_whatever() 

Per un numero variabile di array, supponiamo che sono tutti combinati in un grande array arrays. Quindi potresti fare

if np.all(arrays[:-1] == arrays[1:]): 
    do_whatever() 
+0

@JayanthReddy: Probabilmente perché hai fatto "array" a un elenco o qualcosa del genere. – user2357112