Python/Debugging

UFuncTypeError: Cannot cast ufunc 'add' output from dtype('float64') to dtype('int64') with casting rule 'same_kind' 해결법

jimmy_AI 2022. 10. 23. 21:23
반응형

오류 개요

두 넘파이 배열 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.]]