numpy.can_cast() 메서드는 캐스팅(casting) 규칙에 따라 배열 스칼라(array scalar)와 지정된 데이터 타입 간의 형변환이 가능한 경우 True를 반환합니다.
이 메서드는 두 개의 매개변수를 사용합니다.
- 첫 번째 매개변수: 형변환의 원본이 되는 스칼라 값, 데이터 타입 또는 배열
- 두 번째 매개변수: 변환하려는 대상 데이터 타입
단계별 진행 방법
1단계: 필요한 라이브러리 임포트
먼저 NumPy 라이브러리를 임포트합니다.
import numpy as np
2단계: can_cast() 메서드로 형변환 가능 여부 확인
다양한 스칼라 값과 데이터 타입 조합으로 캐스팅 규칙에 따른 형변환 가능 여부를 확인해 보겠습니다.
print("NumPy can_cast() 메서드로 확인하기\n")
print("결과...", np.can_cast(np.array(20), 'i1'))
print("결과...", np.can_cast(np.array(280), 'i1'))
print("결과...", np.can_cast(np.array(80), 'u1'))
print("결과...", np.can_cast(np.array(300.7), np.float32))
print("결과...", np.can_cast(np.array(120.6), np.float64))
print("결과...", np.can_cast(np.array(7.2e100), np.float32))
print("결과...", np.can_cast(np.array(6.5e100), np.float64))전체 예제 코드
import numpy as np
# numpy.can_cast()는 캐스팅 규칙에 따라 배열 스칼라와
# 데이터 타입 간의 형변환이 가능하면 True를 반환합니다.
# 첫 번째 매개변수: 원본이 되는 스칼라, 데이터 타입 또는 배열
# 두 번째 매개변수: 변환 대상 데이터 타입
print("NumPy can_cast() 메서드로 확인하기\n")
print("결과...", np.can_cast(np.array(20), 'i1'))
print("결과...", np.can_cast(np.array(280), 'i1'))
print("결과...", np.can_cast(np.array(80), 'u1'))
print("결과...", np.can_cast(np.array(300.7), np.float32))
print("결과...", np.can_cast(np.array(120.6), np.float64))
print("결과...", np.can_cast(np.array(7.2e100), np.float32))
print("결과...", np.can_cast(np.array(6.5e100), np.float64))실행 결과
NumPy can_cast() 메서드로 확인하기 결과... True 결과... False 결과... True 결과... True 결과... True 결과... False 결과... True
결과 상세 해석
각 결과가 참(True) 또는 거짓(False)으로 나온 이유를 살펴보겠습니다.
- np.array(20) → 'i1' : True
20은 int8(-128 ~ 127) 표현 범위 내에 있으므로 안전하게 형변환이 가능합니다. - np.array(280) → 'i1' : False
280은 int8의 최댓값인 127을 초과하기 때문에 데이터 손실이 발생하여 형변환이 허용되지 않습니다. - np.array(80) → 'u1' : True
80은 uint8(0 ~ 255) 범위 내에 있으므로 형변환이 가능합니다. - np.array(300.7) → np.float32 : True
300.7은 float32가 표현할 수 있는 범위 내의 값입니다. - np.array(120.6) → np.float64 : True
float64는 매우 넓은 표현 범위를 제공하므로 문제없이 변환됩니다. - np.array(7.2e100) → np.float32 : False
float32의 최대 표현 범위(약 3.4 × 10³⁸)를 크게 초과하는 값이라 형변환이 불가능합니다. - np.array(6.5e100) → np.float64 : True
float64의 최대 표현 범위(약 1.8 × 10³⁰⁸) 내에 있는 값이므로 정상적으로 변환됩니다.
마무리
numpy.can_cast()는 데이터 손실 없이 안전한 형변환이 가능한지 사전에 검증할 수 있는 유용한 도구입니다. 특히 대규모 수치 연산에서 의도하지 않은 오버플로우나 정밀도 손실을 방지하고자 할 때, 실제 형변환을 수행하기 전에 이 메서드로 가능 여부를 먼저 확인하는 것이 좋은 프로그래밍 습관입니다.