Ich möchte einige Unit-Tests für meine App durchführen und muss zwei Arrays vergleichen. Was ist der beste Weg, um Gleichheit zu behaupten, da array.__eq__
ein neues Array zurückgegeben wird ( TestCase.assertEqual
was fehlschlägt)?
Zur Zeit benutze ich
self.assertTrue((arr1 == arr2).all())
aber ich mag es nicht wirklich
python
unit-testing
numpy
Hersteller
quelle
quelle
(np.array([1, 1]) == np.array([1])).all()
TrueAntworten:
Überprüfen Sie die Assert-Funktionen in
numpy.testing
zassert_array_equal
Bei Gleitkomma-Arrays schlägt der Gleichheitstest möglicherweise fehl und
assert_almost_equal
ist zuverlässiger.aktualisieren
Vor einigen Versionen wurde numpy erhalten,
assert_allclose
was jetzt mein Favorit ist, da es uns ermöglicht, sowohl absolute als auch relative Fehler anzugeben und keine Dezimalrundung als Nähekriterium erfordert.quelle
unittest
, können Sie diese verwenden,self.assertIsNone(np.testing.assert_array_equal(a, b))
da sie zurückgegeben werden,None
wenn die Arrays gleich sind.Ich finde
(arr1 == arr2).all()
sieht ziemlich gut aus. Aber Sie könnten verwenden:aber es ist nicht ganz dasselbe.
Eine Alternative, fast die gleiche wie in Ihrem Beispiel, ist:
Beachten Sie, dass scipy.array tatsächlich eine Referenz numpy.array ist. Das erleichtert das Auffinden der Dokumentation.
quelle
Ich finde, dass die Verwendung
self.assertEqual(arr1.tolist(), arr2.tolist())
der einfachste Weg ist, Arrays mit unittest zu vergleichen.Ich bin damit einverstanden, dass es nicht die schönste und wahrscheinlich nicht die schnellste Lösung ist, aber es ist wahrscheinlich einheitlicher mit dem Rest Ihrer Testfälle, Sie erhalten die unitteste Fehlerbeschreibung und es ist wirklich einfach zu implementieren.
quelle
np.nan
, danp.nan != np.nan
derself.assertEqual
Versuch dies nicht erklären kann.Seit Python 3.2 können Sie verwenden
assertSequenceEqual(array1.tolist(), array2.tolist())
.Dies hat den Mehrwert, Ihnen die genauen Elemente anzuzeigen, in denen sich die Arrays unterscheiden.
quelle
float
Typ sind. Wir brauchen wirklichassertSequenceAlmostEqual
In meinen Tests verwende ich Folgendes:
quelle
np.linalg.norm(arr1 - arr2) < 1e-6
quelle