Wenn Sie überprüfen möchten, ob zwei Arrays die gleichen shape
AND elements
haben, sollten Sie np.array_equal
verwenden, da dies die in der Dokumentation empfohlene Methode ist.
Performance-weise nicht erwarten, dass jede Gleichheitsprüfung eine andere schlagen wird, da es nicht viel Platz zur Optimierung gibt comparing two elements
. Nur zum Wohle habe ich noch ein paar Tests gemacht.
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
So ziemlich gleich, keine Notwendigkeit, über die Geschwindigkeit zu reden.
Die (A==B).all()
verhält sich ziemlich viel wie der folgende Code-Schnipsel:
x = [1,2,3]
y = [1,2,3]
print all([True if x[i]==y[i] else False for i in range(len(x))])
> True
Sie fast immer 'np.array_equal' IME wollen. '(A == B) .all()' wird ** abstürzen, wenn A und B unterschiedliche Längen haben **. Ab 1.10 erhöht [== in diesem Fall eine Verwarnungswarnung] (https://github.com/numpy/numpy/commit/6bf0e419dc79ea6815557c57b7e9bb504ba20543). –
Sie haben einen guten Punkt, aber IME Ich weiß normalerweise, dass die Form von A und B vor der Hand. Ich schätze, es hängt vom Kontext und Geschmack ab, denke ich. –