Python/Debugging

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 해결법

jimmy_AI 2022. 7. 14. 21:49
반응형

if문 넘파이 배열 비교 연산자 ValueError 디버깅

비교문에서 numpy array 등 자료형에 대한 ==, != 연산 적용 시 등장할 수 있는

"ValueError: The truth value of an array with more than one element is

ambiguous. Use a.any() or a.all()"

오류에 대하여 원인과 해결 방안을 다루어보도록 하겠습니다.

(참고 : 판다스 시리즈 등 자료형에서도 비슷한 종류의 오류 발생이 가능합니다.)

 

 

에러 원인

아래는 두 넘파이 배열이 같은지를 if문 내에서 비교하려는 예시입니다.

import numpy as np

a = np.array([1, 2, 3, 4])
b = np.array([1, 2, 3, 4])

if a == b:
    print("a와 b가 같습니다!")

그러나, 위 코드 실행 시 글 맨 위에서 언급했던 메시지 내용의 ValueError가 발생합니다.

 

반응형

 

a == b의 결과를 자세히 살펴보면 다음과 같습니다.

a == b
# array([ True,  True,  True,  True])

이는 넘파이 배열의 비교 연산 정의에 의하여 True/False로 바로 반환되기 보다는

각 위치의 자료가 일치하는지 여부를 각각 True/False로 취급하여 등장하는 것이며,

배열 자체가 참으로 취급되어야 하는지 혹은 거짓으로 취급되어야 하는지에 대한

여부가 불분명하기 때문입니다.

 

 

에러 해결 방법

오류 메시지에 표현된대로 any 혹은 all 연산을 적용하여 최종 True/False 값을 반환받으며

해결이 가능합니다.

 

모든 위치의 값이 True인지를 체크하고 싶다면 all 연산을,

단 1개라도 True인지를 체크하고 싶다면 any 연산을 적용해주시면 됩니다.

if (a == b).all():
    print("a와 b가 같습니다!")
# 결과 : array 내의 모든 값들이 True이기 때문에 print문 실행