(A==B).all()
tester si toutes les valeurs du tableau (A == B) sont vraies.
Remarque: vous souhaitez peut-être également tester les formes A et B, telles que A.shape == B.shape
Cas spéciaux et alternatives (d'après la réponse de dbaupp et le commentaire de yoavram)
Il convient de noter que:
- cette solution peut avoir un comportement étrange dans un cas particulier: si l'un
A
ou l' autre B
est vide et que l'autre contient un seul élément, alors il revient True
. Pour une raison quelconque, la comparaison A==B
renvoie un tableau vide, pour lequel l' all
opérateur revient True
.
- Un autre risque est que si
A
et B
n'ont pas la même forme et ne sont pas diffusables, cette approche soulèvera une erreur.
En conclusion, si vous avez un doute sur la forme A
et la B
forme ou si vous voulez simplement être en sécurité: utilisez l'une des fonctions spécialisées:
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()
se bloque si A et B ont des longueurs différentes . Depuis numpy 1.10, == déclenche un avertissement de dépréciation dans ce cas .nan!=nan
implique celaarray(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 est une matrice unitaire, donc H xH.T.conj
est une matrice d'identité. Maisnp.array_equal
renvoie FalseLa
(A==B).all()
solution est très soignée, mais il existe des fonctions intégrées pour cette tâche. À savoirarray_equal
,allclose
etarray_equiv
.(Bien que certains tests rapides avec
timeit
semblent indiquer que la(A==B).all()
méthode est la plus rapide, ce qui est un peu particulier, étant donné qu'elle doit allouer un tout nouveau tableau.)la source
(A==B).all()
. Par exemple, essayez(np.array([1])==np.array([])).all()
True
np.array_equal(np.array([1]), np.array([]))
False
(a==b).all()
c'est encore plus rapide quenp.array_equal(a, b)
(qui aurait pu vérifier un seul élément et quitter).np.array_equal
fonctionne également aveclists of arrays
etdicts of arrays
. Cela pourrait être une raison pour une performance plus lente.allclose
, c'est ce dont j'avais besoin pour les calculs numériques . Il compare l'égalité des vecteurs dans une tolérance . :)np.array_equiv([1,1,1], 1) is True
. En effet, la cohérence des formes signifie qu'elles sont soit de la même forme, soit qu'un tableau d'entrée peut être diffusé pour créer la même forme que l'autre.Mesurons les performances en utilisant le morceau de code suivant.
Production
Selon les résultats ci-dessus, les méthodes numpy semblent être plus rapides que la combinaison de l' opérateur == et de la méthode all () et en comparant les méthodes numpy, la plus rapide semble être la méthode numpy.array_equal .
la source
Si vous voulez vérifier si deux tableaux ont le même
shape
ETelements
vous devez utilisernp.array_equal
car c'est la méthode recommandée dans la documentation.Donc à peu près égal, pas besoin de parler de vitesse.
Le
(A==B).all()
se comporte à peu près comme l'extrait de code suivant:la source
Habituellement, deux tableaux auront quelques petites erreurs numériques,
Vous pouvez utiliser
numpy.allclose(A,B)
, au lieu de(A==B).all()
. Cela renvoie un bool True / Falsela source
Maintenant, utilisez
np.array_equal
. De la documentation:la source