Se si desidera verificare se due array hanno lo stesso shape
AND, elements
è necessario utilizzare np.array_equal
in quanto è il metodo consigliato nella documentazione.
Per quanto riguarda le prestazioni, non ci si aspetta che un controllo dell'uguaglianza ne superi un altro, poiché non c'è molto spazio per l'ottimizzazione comparing two elements
. Solo per il gusto, ho ancora fatto alcuni test.
import numpy as np
import timeit
A = np.zeros((300, 300, 3))
B = np.zeros((300, 300, 3))
C = np.ones((300, 300, 3))
timeit.timeit(stmt='(A==B).all()', setup='from __main__ import A, B', number=10**5)
timeit.timeit(stmt='np.array_equal(A, B)', setup='from __main__ import A, B, np', number=10**5)
timeit.timeit(stmt='np.array_equiv(A, B)', setup='from __main__ import A, B, np', number=10**5)
> 51.5094
> 52.555
> 52.761
Quindi praticamente uguale, non c'è bisogno di parlare della velocità.
Le (A==B).all()
si comporta più o meno come il seguente frammento di codice:
x = [1,2,3]
y = [1,2,3]
print all([x[i]==y[i] for i in range(len(x))])
> True
np.array_equal
IME.(A==B).all()
andrà in crash se A e B hanno lunghezze diverse . A partire da numpy 1.10, == genera un avviso di deprecazione in questo caso .