본문 바로가기
Python/Python FAQ

Python 두 개의 NumPy 배열을 원소별로 비교하여 동등성을 확인합니다., Comparing two NumPy arrays for equality, element-wise

by 베타코드 2023. 12. 5.
반응형

질문


두 개의 NumPy 배열을 비교하는 가장 간단한 방법은 무엇인가요 (여기서 동등성은 다음과 같이 정의됩니다: A = B이면 모든 인덱스 i에 대해 A[i] == B[i])?

==을 사용하면 부울 배열이 생성됩니다:

 >>> numpy.array([1,1,1]) == numpy.array([1,1,1])

array([ True,  True,  True], dtype=bool)

이 배열의 요소를 and하여 배열이 동일한지 확인해야 하나요, 아니면 비교하는 더 간단한 방법이 있나요?


답변


(A==B).all()

모든 배열 값이 True인지 테스트합니다. (A==B).

참고: A와 B의 형태(shape)도 테스트하고 싶다면, A.shape == B.shape와 같이 테스트할 수 있습니다.

특수한 경우와 대안 (dbaupp의 답변과 yoavram의 댓글에서)

다음 사항을 주의해야 합니다:

  • 이 해결책은 특정한 경우에 이상한 동작을 할 수 있습니다: A 또는 B 중 하나가 비어 있고, 다른 하나에는 단일 요소가 포함되어 있는 경우, 이 함수는 True를 반환합니다. 어떤 이유에서인지, 비교 A==B는 빈 배열을 반환하며, all 연산자는 True를 반환합니다.
  • 또 다른 위험은 AB의 형태(shape)가 동일하지 않고 브로드캐스트할 수 없는 경우, 이 접근 방식은 오류를 발생시킵니다.

결론적으로, AB의 형태(shape)에 대해 의심이 든다거나 안전하게 하려면, 다음 중 하나의 특화된 함수를 사용하세요:

np.array_equal(A,B)  # 동일한 형태와 동일한 요소 값을 테스트합니다.
np.array_equiv(A,B)  # 브로드캐스트할 수 있는 형태와 동일한 요소 값을 테스트합니다.
np.allclose(A,B,...) # 동일한 형태이며, 요소 값이 충분히 가까운지 테스트합니다.
반응형

댓글