Beste Weg, um zu behaupten, für numpy.array Gleichheit?
Möchte ich einige unit-tests für meine app, und ich brauche, um zu vergleichen, zwei arrays. Da array.__eq__
gibt ein neues array zurück (so TestCase.assertEqual
ausfällt), was ist der beste Weg, um zu behaupten, für die Gleichheit?
Derzeit bin ich mit
self.assertTrue((arr1 == arr2).all())
aber ich weiß nicht wirklich, wie es
Du musst angemeldet sein, um einen Kommentar abzugeben.
check-out die assert-Funktionen in
numpy.testing
, z.B.assert_array_equal
für floating-point-arrays Gleichheit test möglicherweise fehl, und
assert_almost_equal
ist zuverlässiger.update
Ein paar Versionen her numpy erhalten
assert_allclose
das ist jetzt mein Favorit, da es erlaubt uns, geben Sie sowohl den absoluten und relativen Fehler und erfordert keine Dezimalstellen mit Rundung der Nähe-Kriterium.dtype
, dann tun wir so getrennt. Pandas hat auch assert-Funktion, die auch überprüfen, dass der index-und Spalten-Namen sind, wie erwartet, die, AFAIK, verwenden Sie die numpy geltend machen, um zu überprüfen, die numerische Werte und vielleicht assert_equal für andere dtypes.Ich denke
(arr1 == arr2).all()
sieht ziemlich nett. Aber man könnte:aber es ist nicht ganz das gleiche.
Alternative, fast das gleiche wie dein Beispiel:
Beachten Sie, dass scipy.array ist eigentlich ein Verweis numpy.array. Das macht es leichter zu finden in der Dokumentation.
Finde ich, dass
self.assertEqual(arr1.tolist(), arr2.tolist())
ist der einfachste Weg der Vergleich von arrays mit unittest.
Ich Zustimmen, dass es nicht die schönste Lösung, und es ist wahrscheinlich nicht die Schnellste, aber es ist wahrscheinlich mehr einheitlich mit dem rest Ihrer Testfälle, erhalten Sie alle das unittest-Fehler Beschreibung und es ist wirklich einfach zu implementieren.
Da Python 3.2 können Sie
assertSequenceEqual(array1.tolist(), array2.tolist())
.Dies hat den zusätzlichen Wert zeigt Ihnen die genaue Elemente, in denen die arrays unterscheiden.
float
geben. Brauchen wir wirklichassertSequenceAlmostEqual
In meinen tests verwende ich diese:
np.linalg.norm(arr1 - arr2) < 1e-6