내 앱에 대해 몇 가지 단위 테스트를하고 싶은데 두 배열을 비교해야합니다. 이후 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