web-dev-qa-db-fra.com

Le meilleur moyen d'affirmer l'égalité numpy.array?

Je souhaite effectuer des tests unitaires 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 ne l'aime pas vraiment

80
maker

découvrez les fonctions d'assertion dans numpy.testing , par exemple.

assert_array_equal

pour les tableaux d'égalité, le test d'égalité peut échouer et assert_almost_equal est plus fiable.

mettre à jour

Il y a quelques versions, numpy a obtenu assert_allclose qui est maintenant ma préférée, car elle nous permet de spécifier une erreur absolue et une erreur relative et ne requiert pas l'arrondi décimal comme critère de proximité.

96
Josef

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. 

17
SiggyF

Je trouve qu'utiliserself.assertEqual(arr1.tolist(), arr2.tolist())est le moyen le plus simple de comparer des tableaux avec unittest.

Je conviens que ce n'est pas la solution la plus jolie et probablement pas la plus rapide, mais elle est probablement plus uniforme avec le reste de vos scénarios de test. Vous obtenez une description de l'erreur la plus légère, et sa mise en œuvre est très simple.

12
asimoneau

Depuis Python 3.2, vous pouvez utiliser assertSequenceEqual(array1.tolist(), array2.tolist()).

Cela a la valeur ajoutée de vous montrer les éléments exacts dans lesquels les tableaux diffèrent.

5
HagaiH

J'utilise ceci dans mes tests:

try:
    numpy.testing.assert_array_equal(arr1, arr2)
    res = True
except AssertionError as err:
    res = False
    print (err)
self.assertTrue(res)
2
Edo user1419293