154 votes

Quel est le meilleur moyen d'affirmer l'égalité numpy.array?

Je veux faire quelques tests pour mon application, et je dois comparer deux tableaux. Puisque array.__eq__ renvoie un nouveau tableau (donc TestCase.assertEqual échoue), quel est le meilleur moyen d'affirmer l'égalité?

J'utilise actuellement

 self.assertTrue((arr1 == arr2).all())
 

mais je n'aime pas vraiment ça: \

169voto

user333700 Points 4749

vérifier les fonctions d'assertion en numpy.testing , par exemple

assert_array_equal

Pour les tableaux à virgule flottante, le test d'égalité peut échouer et assert_almost_equal est plus fiable.

mettre à jour

Numpy, il y a quelques versions, a obtenu assert_allclose ce qui est maintenant mon préféré, car il nous permet de spécifier à la fois les erreurs absolues et relatives et ne requiert pas l'arrondi décimal comme critère de proximité.

35voto

SiggyF Points 5320

Je pense que (arr1 == arr2).all() est plutôt joli. Mais vous pouvez utiliser:

 numpy.allclose(arr1, arr2)
 

mais ce n'est pas tout à fait pareil.

Une alternative presque identique à votre exemple est:

 numpy.alltrue(arr1 == arr2)
 

Notez que scipy.array est en fait une référence numpy.array. Cela facilite la recherche de la documentation.

25voto

asimoneau Points 16

Je trouve qu'utiliser self.assertEqual(arr1.tolist(), arr2.tolist()) est le moyen le plus simple de comparer des tableaux avec ceux qui ne le sont pas.

Je conviens que ce n'est pas la solution la plus jolie et ce n'est probablement pas la plus rapide, mais elle est probablement plus uniforme avec le reste de vos tests, vous obtenez toute la description d'erreur la plus modeste et elle est vraiment simple à implémenter.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X