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)
Answered By: Mark

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)
Answered By: Eswcvlad

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?

Answered By: Jose Sergio Hleap

Cleaner syntax to @Eswcvlad’s answer:

import numpy as np

with np.testing.assert_raises(AssertionError):
    np.testing.assert_array_equal(expected, actual)
Answered By: Mikhail

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)
Answered By: Muhammad Yasirroni
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.