Ich möchte testen, ob zwei numplige Arrays (fast gleich) sind, also habe ich die Funktion np.allclose
verwendet. Das einzige Problem ist, dass es True
zurückgibt, wenn man eine zweidimensionale Matrix und eine dreidimensionale Matrix von gleichen Elementen erhält.
Nun weiß ich über np.array_equal
, die Elemente und Formen vergleicht, aber es erlaubt mir nicht zu testen, ob die Elemente nah sind, nur wenn sie gleich sind. Zum Beispiel,
Gibt False
Gibt es eine Funktion, die ich verwenden kann, die für (x,y)
und (z1,z2)
, aber für (x,z1)
in diesem Fall wahr zurückgibt?
Was passiert, ist, dass allclose
seine Eingabe sendet. Dies erlaubt Vergleiche mit ähnlich geformten Arrays (zB 3
und [3, 3, 3]
) nach den Sende-Regeln .
Sehen Sie sich für Ihre Zwecke die Funktionen numpy.testing
an, insbesondere np.testing.assert_allclose
oder assert_array_almost_equal
, die sowohl auf Form als auch auf Werte prüft. (Ich erinnere mich nicht an den Unterschied zwischen diesen beiden, aber es bezieht sich auf die Art, wie sie Gleitkommadifferenzen berechnen.)
Diese sind besonders praktisch, wenn Sie Assert-basierte Komponententests verwenden.
Die meisten (alle?) der numpy.testing.assert_*
-Funktionen prüfen sowohl die Array-Form als auch die Wertegleichheit.
Zum Beispiel:
%Vor%Was ergibt:
%Vor% Eine weitere nützliche (und derzeit nicht so gut dokumentierte) Sache über diese Funktionen ist, dass sie NaN
als gleich vergleichen.
Dies wird zum Beispiel gelingen:
%Vor% Während numpy.allclose
für denselben Fall False
zurückgibt:
Nebenbei bemerkt, numpy.isclose
(aber nicht allclose
) hat eine equal_nan
kwarg, um das zu kontrollieren.