반응형
오류 개요
두 넘파이 배열 a와 b에 대하여 a에 b를 더한 결과를 얻으려는 과정에서
아래와 같은 에러가 발생하였습니다.
import numpy as np
a = np.array([[1, 2],
[3, 4]])
b = np.array([[5.0, 6.0],
[7.0, 8.0]])
a += b # UFuncTypeError: Cannot cast ufunc 'add' output from dtype('float64') to dtype('int64') with casting rule 'same_kind'
오류 원인
위 예시에서 a는 정수형, b는 실수형 자료로 구성된 배열인데
+= 연산을 수행하는 과정에서 서로 다른 자료형 배열 간의 casting이 unsafe하기 때문입니다.
반응형
해결 방법
1. 두 배열 자료형을 동일하게 변경 후 += 연산 진행
둘 중 한 배열의 자료형을 astype 메소드 등으로 변경하여 자료형을 일치시킨 뒤에
+= 연산을 수행해주시면 정상적으로 수행됩니다.
b = b.astype(np.int64)
a += b
print(a)
# 출력 결과
[[ 6 8]
[10 12]]
2. a += b 대신 a = a + b 형태의 연산 사용
a += b 연산을 a = a + b 형태로 풀어쓰게 되면 캐스팅이 허용되어
자료형 변환 없이 덧셈이 가능합니다.(결과 배열의 자료형은 자동 형변환 결과를 따릅니다.)
a = a + b
print(a)
# 출력 결과
[[ 6. 8.]
[10. 12.]]