(A==B).all()
Testen Sie, ob alle Werte des Arrays (A == B) True sind.
Hinweis: Vielleicht möchten Sie auch die A- und B-Form testen, z A.shape == B.shape
Sonderfälle und Alternativen (aus der Antwort von dbaupp und dem Kommentar von yoavram)
Es sollte erwähnt werden, dass:
- Diese Lösung kann in einem bestimmten Fall ein seltsames Verhalten haben: Wenn entweder
A
oder B
leer ist und das andere ein einzelnes Element enthält, wird es zurückgegeben True
. Aus irgendeinem Grund gibt der Vergleich A==B
ein leeres Array zurück, für das der all
Operator zurückgibt True
.
- Ein weiteres Risiko ist , wenn
A
und B
nicht die gleiche Form hat und nicht sandte, dann wird dieser Ansatz einen Fehler erhöhen.
Zum Schluss, wenn Sie einen Zweifel haben A
und B
wollen Form oder einfach nur um sicher zu sein: Verwendung einer der spezialisierten Funktionen:
np.array_equal(A,B) # test if same shape, same elements values
np.array_equiv(A,B) # test if broadcastable shape, same elements values
np.allclose(A,B,...) # test if same shape, elements have close enough values
np.array_equal
IME.(A==B).all()
wird abstürzen , wenn A und B unterschiedliche Längen aufweisen . Ab Nummer 1.10 löst == in diesem Fall eine Verfallswarnung aus .nan!=nan
impliziertarray(nan)!=array(nan)
.import numpy as np
H = 1/np.sqrt(2)*np.array([[1, 1], [1, -1]]) #hadamard matrix
np.array_equal(H.dot(H.T.conj()), np.eye(len(H))) # checking if H is an unitary matrix or not
H ist eine einheitliche Matrix, also ist H xH.T.conj
eine Identitätsmatrix. Abernp.array_equal
kehrt zurück FalseDie
(A==B).all()
Lösung ist sehr ordentlich, aber es gibt einige integrierte Funktionen für diese Aufgabe. Nämlicharray_equal
,allclose
undarray_equiv
.(Obwohl einige schnelle Tests mit
timeit
zu zeigen scheinen, dass die(A==B).all()
Methode die schnellste ist, was etwas eigenartig ist, da sie ein ganz neues Array zuweisen muss.)quelle
(A==B).all()
. Versuchen(np.array([1])==np.array([])).all()
Sie zum Beispiel : , es gibtTrue
, währendnp.array_equal(np.array([1]), np.array([]))
gibtFalse
(a==b).all()
ist dies immer noch schneller alsnp.array_equal(a, b)
(was nur ein einzelnes Element hätte überprüfen und beenden können).np.array_equal
funktioniert auch mitlists of arrays
unddicts of arrays
. Dies könnte ein Grund für eine langsamere Leistung sein.allclose
, die ich für numerische Berechnungen brauchte . Es vergleicht die Gleichheit von Vektoren innerhalb einer Toleranz . :)np.array_equiv([1,1,1], 1) is True
. Dies liegt daran, dass: Formkonsistent bedeutet, dass sie entweder dieselbe Form haben oder dass ein Eingabearray gesendet werden kann, um dieselbe Form wie das andere zu erstellen.Lassen Sie uns die Leistung mithilfe des folgenden Codes messen.
Ausgabe
Gemäß den obigen Ergebnissen scheinen die numpy-Methoden schneller zu sein als die Kombination des == -Operators und der all () -Methode, und durch Vergleichen der numpy-Methoden scheint die numpy.array_equal- Methode die schnellste zu sein .
quelle
Wenn Sie überprüfen möchten, ob zwei Arrays dasselbe
shape
UND habenelements
, sollten Sie diese verwenden,np.array_equal
da dies die in der Dokumentation empfohlene Methode ist.So ziemlich gleich, dass man nicht über die Geschwindigkeit sprechen muss.
Das
(A==B).all()
verhält sich so ziemlich wie das folgende Code-Snippet:quelle
Normalerweise weisen zwei Arrays einige kleine numerische Fehler auf.
Sie können
numpy.allclose(A,B)
anstelle von verwenden(A==B).all()
. Dies gibt ein bool True / False zurückquelle
Jetzt verwenden
np.array_equal
. Aus der Dokumentation:quelle