Je veux faire des tests unitaires pour mon application et je dois comparer deux tableaux. Puisque array.__eq__
renvoie un nouveau tableau (donc TestCase.assertEqual
échoue), quelle est la meilleure façon d'affirmer l'égalité?
J'utilise actuellement
self.assertTrue((arr1 == arr2).all())
mais je n'aime pas vraiment ça
python
unit-testing
numpy
fabricant
la source
la source
(np.array([1, 1]) == np.array([1])).all()
donnera VraiRéponses:
vérifier les fonctions d'assert dans
numpy.testing
, par exempleassert_array_equal
pour les tableaux à virgule flottante, 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
ce qui est maintenant mon préféré car il nous permet de spécifier à la fois l'erreur absolue et relative et ne nécessite pas d'arrondi décimal comme critère de proximité.la source
unittest
vous pouvez l'utiliserself.assertIsNone(np.testing.assert_array_equal(a, b))
tel quelNone
si les tableaux sont égaux.Je pense que
(arr1 == arr2).all()
c'est plutôt joli. Mais vous pouvez utiliser:mais ce n'est pas tout à fait pareil.
Une alternative, presque la même que votre exemple est:
Notez que scipy.array est en fait une référence numpy.array. Cela facilite la recherche de la documentation.
la source
Je trouve que l'utilisation
self.assertEqual(arr1.tolist(), arr2.tolist())
est le moyen le plus simple de comparer des tableaux avec unittest.Je suis d'accord que ce n'est pas la solution la plus jolie et ce n'est probablement pas la plus rapide, mais c'est probablement plus uniforme avec le reste de vos cas de test, vous obtenez toute la description d'erreur la plus simple et c'est vraiment simple à mettre en œuvre.
la source
np.nan
, carnp.nan != np.nan
et laself.assertEqual
tentative ne pourra pas en tenir compte.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.
la source
float
type. Nous avons vraiment besoinassertSequenceAlmostEqual
Dans mes tests, j'utilise ceci:
la source
np.linalg.norm(arr1 - arr2) < 1e-6
la source