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

Python NumPy can_cast() 메서드 – 데이터 유형 간 캐스팅 가능 여부 확인 및 캐스트 규칙 제어하기

numpy.can_cast() 메서드란?

numpy.can_cast() 메서드는 지정된 캐스팅 규칙(casting rule)에 따라 두 데이터 유형 간의 변환(캐스트)이 가능한 경우 True를 반환하고, 그렇지 않으면 False를 반환합니다. 배열 연산 시 데이터 손실을 방지하기 위해 사전에 캐스팅 가능 여부를 점검할 때 유용하게 활용됩니다.

매개변수 구성

  • 첫 번째 매개변수: 캐스팅의 원본이 되는 데이터 유형 또는 배열
  • 두 번째 매개변수: 변환 대상이 되는 데이터 유형
  • 세 번째 매개변수: 허용되는 캐스팅 방식을 제어하며, 'no', 'equiv', 'safe', 'same_kind', 'unsafe' 중 하나의 값을 가집니다.

캐스팅 규칙의 종류

  • 'no' – 데이터 유형 간 어떠한 캐스팅도 허용하지 않습니다.
  • 'equiv' – 바이트 순서(byte order) 변경만 허용합니다.
  • 'safe' – 값이 손실되지 않고 보존될 수 있는 안전한 캐스트만 허용합니다.
  • 'same_kind' – 안전한 캐스트 또는 동일한 종류(kind) 범위 내의 캐스트(예: float64 → float32)만 허용합니다.
  • 'unsafe' – 모든 형태의 데이터 변환이 허용됩니다.

단계별 실습

1단계: 필요한 라이브러리 임포트

import numpy as np

2단계: can_cast() 메서드 호출

numpy.can_cast() 메서드를 사용해 캐스팅 규칙에 따른 데이터 유형 간 변환 가능 여부를 확인합니다.

print("Numpy에서 can_cast() 메서드로 확인\n")

규칙 'no' 적용 예시

print("결과...", np.can_cast('i8', 'i8', 'no'))
print("결과...", np.can_cast('<i8', '>i8', 'no'))

규칙 'equiv' 적용 예시

print("결과...", np.can_cast('<i8', '>i8', 'equiv'))
print("결과...", np.can_cast('<i4', '>i8', 'equiv'))

규칙 'safe' 적용 예시

print("결과...", np.can_cast('i4', 'i8', 'safe'))
print("결과...", np.can_cast('i8', 'i4', 'safe'))

규칙 'same_kind' 적용 예시

print("결과...", np.can_cast('i8', 'i4', 'same_kind'))
print("결과...", np.can_cast('i8', 'i4', 'same_kind'))

전체 예제 코드

import numpy as np

# numpy.can_cast() 메서드는 캐스팅 규칙에 따라 데이터 유형 간 변환이 가능하면 True를 반환합니다.

print("Numpy에서 can_cast() 메서드로 확인\n")

# 규칙 "no"
print("결과...", np.can_cast('i8', 'i8', 'no'))
print("결과...", np.can_cast('<i8', '>i8', 'no'))

# 규칙 "equiv"
print("결과...", np.can_cast('<i8', '>i8', 'equiv'))
print("결과...", np.can_cast('<i4', '>i8', 'equiv'))

# 규칙 "safe"
print("결과...", np.can_cast('i4', 'i8', 'safe'))
print("결과...", np.can_cast('i8', 'i4', 'safe'))

# 규칙 "same_kind"
print("결과...", np.can_cast('i8', 'i4', 'same_kind'))
print("결과...", np.can_cast('i8', 'i4', 'same_kind'))

실행 결과

Numpy에서 can_cast() 메서드로 확인

결과... True
결과... False
결과... True
결과... False
결과... True
결과... False
결과... True
결과... True

실행 결과에서 알 수 있듯이, 'safe' 규칙에서는 int32(i4)에서 int64(i8)로의 확장 변환은 허용되지만 그 반대인 축소 변환은 거부됩니다. 반면 'same_kind' 규칙은 동일한 정수 계열 내에서의 축소 변환도 허용하므로 두 경우 모두 True가 반환되는 것을 확인할 수 있습니다.