Prüfen Sie, ob zwei numplige Arrays (einschließlich) ungefähr gleich sind

8

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.

%Vor%

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,

%Vor%

Gibt False

zurück

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?

    
C_Z_ 30.09.2015, 20:16
quelle

1 Antwort

9

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:

%Vor%

Nebenbei bemerkt, numpy.isclose (aber nicht allclose ) hat eine equal_nan kwarg, um das zu kontrollieren.

    
Joe Kington 30.09.2015, 20:49
quelle

Tags und Links