numpy testing assert array NOT equal
Question:
We have numpy.testing.assert_array_equal
to assert that two arrays are equal.
But what is the best way to do numpy.testing.assert_array_not_equal
, that is, to make sure that two arrays are NOT equal?
Answers:
I don’t think there is anything built directly into the NumPy testing framework but you could just use:
np.any(np.not_equal(a1,a2))
and assert true with the built in unittest framework or check with NumPy as assert_equal
to True
e.g.
np.testing.assert_equal(np.any(np.not_equal(a,a)), True)
If you want to use specifically NumPy testing, then you can use numpy.testing.assert_array_equal
together with numpy.testing.assert_raises for the opposite result. For example:
assert_raises(AssertionError, assert_array_equal, array_1, array_2)
Also there is numpy.testing.utils.assert_array_compare
(it is used by numpy.testing.assert_array_equal
), but I don’t see it documented anywhere, so use with caution. This one will check that every element is different, so I guess this is not your use case:
import operator
assert_array_compare(operator.__ne__, array_1, array_2)
Not sure why this hasn’t been posted, may be I didn’t understand the question properly, but what about:
assert not np.array_equal(array1 , array2)
Any reason why you would like to keep it exclusively in the testing module of numpy?
Cleaner syntax to @Eswcvlad’s answer:
import numpy as np
with np.testing.assert_raises(AssertionError):
np.testing.assert_array_equal(expected, actual)
Perhaps you usually want to test if something is almost equal (considering decimal precision) and consequently want to test if something is NOT almost equal in some cases. Building on @Mikhail answer (and also using pytest.raises) this would give:
import numpy as np
import pytest
with pytest.raises(AssertionError):
np.testing.assert_almost_equal(...)
Improving the accepted answer, we can make assert_array_not_equal
as follows
from numpy.testing import assert_array_equal, assert_raises
def assert_array_not_equal(x, y):
return assert_raises(AssertionError, assert_array_equal, x, y)
We have numpy.testing.assert_array_equal
to assert that two arrays are equal.
But what is the best way to do numpy.testing.assert_array_not_equal
, that is, to make sure that two arrays are NOT equal?
I don’t think there is anything built directly into the NumPy testing framework but you could just use:
np.any(np.not_equal(a1,a2))
and assert true with the built in unittest framework or check with NumPy as assert_equal
to True
e.g.
np.testing.assert_equal(np.any(np.not_equal(a,a)), True)
If you want to use specifically NumPy testing, then you can use numpy.testing.assert_array_equal
together with numpy.testing.assert_raises for the opposite result. For example:
assert_raises(AssertionError, assert_array_equal, array_1, array_2)
Also there is numpy.testing.utils.assert_array_compare
(it is used by numpy.testing.assert_array_equal
), but I don’t see it documented anywhere, so use with caution. This one will check that every element is different, so I guess this is not your use case:
import operator
assert_array_compare(operator.__ne__, array_1, array_2)
Not sure why this hasn’t been posted, may be I didn’t understand the question properly, but what about:
assert not np.array_equal(array1 , array2)
Any reason why you would like to keep it exclusively in the testing module of numpy?
Cleaner syntax to @Eswcvlad’s answer:
import numpy as np
with np.testing.assert_raises(AssertionError):
np.testing.assert_array_equal(expected, actual)
Perhaps you usually want to test if something is almost equal (considering decimal precision) and consequently want to test if something is NOT almost equal in some cases. Building on @Mikhail answer (and also using pytest.raises) this would give:
import numpy as np
import pytest
with pytest.raises(AssertionError):
np.testing.assert_almost_equal(...)
Improving the accepted answer, we can make assert_array_not_equal
as follows
from numpy.testing import assert_array_equal, assert_raises
def assert_array_not_equal(x, y):
return assert_raises(AssertionError, assert_array_equal, x, y)