[python] numpy.array 동등성을 주장하는 가장 좋은 방법은 무엇입니까?

내 앱에 대해 몇 가지 단위 테스트를하고 싶은데 두 배열을 비교해야합니다. 이후 array.__eq__반환 새로운 배열 (그래서 TestCase.assertEqual실패), 지 어떤지를 주장하는 가장 좋은 방법은 무엇입니까?

현재 나는

self.assertTrue((arr1 == arr2).all())

근데별로 좋아하지 않아



답변

어설 기능에 체크 아웃 numpy.testing, 예를 들어,

assert_array_equal

부동 소수점 배열의 경우 동등성 테스트가 실패 할 수 있으며 assert_almost_equal더 안정적입니다.

최신 정보

몇 가지 버전 전에 얻은 numpy assert_allclose는 절대 및 상대 오류를 모두 지정할 수 있고 근접성 기준으로 소수 반올림이 필요하지 않기 때문에 이제 제가 가장 좋아하는 것입니다.


답변

(arr1 == arr2).all()꽤 괜찮은 것 같아요 . 그러나 다음을 사용할 수 있습니다.

numpy.allclose(arr1, arr2)

그러나 그것은 완전히 동일하지 않습니다.

귀하의 예와 거의 동일한 대안은 다음과 같습니다.

numpy.alltrue(arr1 == arr2)

scipy.array는 실제로 참조 numpy.array입니다. 문서를 더 쉽게 찾을 수 있습니다.


답변

사용하는 self.assertEqual(arr1.tolist(), arr2.tolist())
것이 배열을 unittest와 비교하는 가장 쉬운 방법 이라는 것을 알았습니다
.

나는 그것이 가장 예쁜 해결책이 아니며 아마도 가장 빠르지는 않지만 아마도 나머지 테스트 케이스와 더 균일하고 모든 단위 테스트 오류 설명을 얻고 구현하기가 정말 간단하다는 데 동의합니다.


답변

Python 3.2부터 assertSequenceEqual(array1.tolist(), array2.tolist()).

이것은 배열이 다른 정확한 항목을 표시하는 추가 가치가 있습니다.


답변

내 테스트에서 나는 이것을 사용합니다.

try:
    numpy.testing.assert_array_equal(arr1, arr2)
    res = True
except AssertionError as err:
    res = False
    print (err)
self.assertTrue(res)


답변

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


답변