Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

NumPy can_cast() 완벽 가이드 – 캐스팅 규칙에 따른 배열 스칼라와 데이터 타입 간 형변환 가능 여부 확인하기

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()는 데이터 손실 없이 안전한 형변환이 가능한지 사전에 검증할 수 있는 유용한 도구입니다. 특히 대규모 수치 연산에서 의도하지 않은 오버플로우나 정밀도 손실을 방지하고자 할 때, 실제 형변환을 수행하기 전에 이 메서드로 가능 여부를 먼저 확인하는 것이 좋은 프로그래밍 습관입니다.