반응형
질문
두 개의 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
를 반환합니다. - 또 다른 위험은
A
와B
의 형태(shape)가 동일하지 않고 브로드캐스트할 수 없는 경우, 이 접근 방식은 오류를 발생시킵니다.
결론적으로, A
와 B
의 형태(shape)에 대해 의심이 든다거나 안전하게 하려면, 다음 중 하나의 특화된 함수를 사용하세요:
np.array_equal(A,B) # 동일한 형태와 동일한 요소 값을 테스트합니다.
np.array_equiv(A,B) # 브로드캐스트할 수 있는 형태와 동일한 요소 값을 테스트합니다.
np.allclose(A,B,...) # 동일한 형태이며, 요소 값이 충분히 가까운지 테스트합니다.
반응형
댓글