Best way to assert for numpy.array equality?

后端 未结 6 1137
长情又很酷
长情又很酷 2020-12-13 16:37

I want to make some unit-tests for my app, and I need to compare two arrays. Since array.__eq__ returns a new array (so TestCase.assertEqual fails)

相关标签:
6条回答
  • 2020-12-13 17:13

    np.linalg.norm(arr1 - arr2) < 1e-6

    0 讨论(0)
  • 2020-12-13 17:18

    Since Python 3.2 you can use assertSequenceEqual(array1.tolist(), array2.tolist()).

    This has the added value of showing you the exact items in which the arrays differ.

    0 讨论(0)
  • 2020-12-13 17:18

    In my tests I use this:

    numpy.testing.assert_array_equal(arr1, arr2)
    
    0 讨论(0)
  • 2020-12-13 17:21

    I think (arr1 == arr2).all() looks pretty nice. But you could use:

    numpy.allclose(arr1, arr2)
    

    but it's not quite the same.

    An alternative, almost the same as your example is:

    numpy.alltrue(arr1 == arr2)
    

    Note that scipy.array is actually a reference numpy.array. That makes it easier to find the documentation.

    0 讨论(0)
  • 2020-12-13 17:23

    check out the assert functions in numpy.testing, e.g.

    assert_array_equal

    for floating point arrays equality test might fail and assert_almost_equal is more reliable.

    update

    A few versions ago numpy obtained assert_allclose which is now my favorite since it allows us to specify both absolute and relative error and doesn't require decimal rounding as the closeness criterion.

    0 讨论(0)
  • 2020-12-13 17:30

    I find that using self.assertEqual(arr1.tolist(), arr2.tolist()) is the easiest way of comparing arrays with unittest.

    I agree it's not the prettiest solution and it's probably not the fastest but it's probably more uniform with the rest of your test cases, you get all the unittest error description and it's really simple to implement.

    0 讨论(0)
提交回复
热议问题