2016-07-21 7 views
11

Mamy numpy.testing.assert_array_equal, aby potwierdzić, że dwie tablice są równe.numpy testowanie tablicy assert NIE równe

Ale jaki jest najlepszy sposób na zrobienie numpy.testing.assert_array_not_equal, czyli upewnienie się, że dwie tablice NIE są równe?

+0

Jak nierównomierne są tablice? Czy muszą się różnić w każdym elemencie, czy przynajmniej w jednym? –

+0

Przynajmniej jeden element powinien być nierówny. Oznacza to, że zawartość dwóch tablic może nie być taka sama. Jeśli jeden element się różni, wszystko jest w porządku. –

+1

Wtedy odpowiedź @ Eswcvlad jest prawdopodobnie najbardziej eleganckim hackem, jaki znajdziesz. –

Odpowiedz

10

Jeśli chcesz użyć testów specjalnie NumPy, a następnie można użyć numpy.testing.assert_array_equal wraz z numpy.testing.assert_raises do odwrotnego rezultatu. Na przykład:

assert_raises(AssertionError, assert_array_equal, array_1, array_2) 

Ponadto istnieje numpy.testing.utils.assert_array_compare (jest on używany przez numpy.testing.assert_array_equal), ale nie widzę go nigdzie udokumentowane, więc należy używać z rozwagą. Ten będzie sprawdzić, że każdy element jest inny, więc myślę, że to nie jest przypadek użycia:

import operator 

assert_array_compare(operator.__ne__, array_1, array_2) 
+1

Schludny hack dla pierwszej metody. Druga się powiedzie, jeśli każdy element, a nie tylko jakiś, będzie różny, o ile wiem. Nie jestem pewien, czy właśnie tego chce OP. +1 w obie strony. –

+0

Tak, masz rację co do drugiego. Dokona edycji odpowiedzi. – Eswcvlad

+0

Pierwszy robi to za mnie! Dzięki! –

4

Nie sądzę, nie ma nic zbudowany bezpośrednio do testowania ram NumPy ale można po prostu użyć:

np.any(np.not_equal(a1,a2)) 

i dochodzić prawda z wbudowanego w ramach unittest lub skontaktować się z NumPy jak np assert_equal do True

np.testing.assert_equal(np.any(np.not_equal(a,a)), True) 
+0

Sens testu jest odwrócony. OP chce, aby nierówne tablice przechodziły. –

+0

Yup - właśnie przerzuciłem test na odwrót. Dzięki za spekulacje. @MadPhysicist – Mark

+0

Powinieneś po prostu użyć 'TestCase.assertTrue (np.any (...))' zamiast (lub 'nose.tools.assert_true (np.any (...))' jeśli jesteś poza 'TestCase'). –

1

Nie wiem, dlaczego to nie zostało wysłane, może ja nie rozumiem pytanie poprawnie, ale co about:

assert not np.array_equal(array1 , array2) 

Jaki jest powód, dla którego chciałbyś zachować go wyłącznie w module testowym numpy?