NumPy 데이터 유형 이해하기

NumPyBeginner
지금 연습하기

소개

이 실습에서는 NumPy 의 다양한 데이터 유형을 이해하고 관리하는 단계별 가이드를 제공합니다. NumPy (Numerical Python) 는 대규모 다차원 배열 및 행렬을 지원하는 강력한 라이브러리이며, 이러한 배열을 효율적으로 연산하기 위한 수학 함수 모음을 제공합니다. Python 의 내장 리스트와 달리 NumPy 배열은 메모리 효율성이 높고 수치 계산 속도가 빠릅니다.

NumPy 배열의 데이터 유형을 확인, 지정 및 변환하는 방법을 배우게 됩니다. 데이터 유형을 이해하는 것은 메모리 사용량과 계산 성능 모두에 영향을 미치기 때문에 매우 중요합니다. 모든 코딩은 코드 편집기에서 main.py 파일로 진행되며, 터미널에서 스크립트를 실행하게 됩니다. 이러한 실습 접근 방식은 수치 컴퓨팅 및 데이터 분석에 필수적인 이러한 기본 개념을 파악하는 데 도움이 될 것입니다.

배열의 데이터 유형 확인하기

NumPy 배열을 생성할 때, NumPy 는 자동으로 요소에 가장 적합한 데이터 타입을 추론합니다. 배열의 dtype 속성을 사용하여 이 추론된 데이터 타입을 쉽게 확인할 수 있습니다.

dtype 속성은 배열이 포함하는 데이터의 종류 (정수, 부동소수점 숫자 등) 와 각 요소가 사용하는 메모리 양을 알려줍니다. 이 정보는 NumPy 가 데이터에 대한 수학 연산을 어떻게 처리할지 이해하는 데 중요합니다.

먼저 왼쪽 파일 탐색기에서 main.py 파일을 엽니다. 간단한 배열을 생성하고 해당 데이터 타입을 출력하는 코드를 추가할 것입니다.

main.py에 다음 코드를 추가하세요:

## 정수 리스트로부터 NumPy 배열 생성
## np.array() 는 Python 리스트를 NumPy 배열로 변환합니다.
arr_int = np.array([1, 2, 3, 4, 5])

## 배열의 데이터 타입 출력
## .dtype 은 배열 요소의 데이터 타입을 보여줍니다.
print("Data type of arr_int:", arr_int.dtype)

이제 파일을 저장하고 터미널에서 실행하여 출력을 확인하세요.

python main.py

콘솔에 배열의 데이터 타입이 출력되는 것을 볼 수 있습니다. 특정 정수 타입 (예: int64) 은 시스템 아키텍처에 따라 달라집니다.

Data type of arr_int: int64

이는 NumPy 가 요소를 정수로 올바르게 식별했음을 확인시켜 줍니다.

생성 시 데이터 유형 지정하기

NumPy 의 자동 타입 추론은 유용하지만, 메모리 효율성을 높이거나 특정 연산의 요구 사항을 충족하기 위해 배열의 데이터 타입을 명시적으로 정의해야 하는 경우가 많습니다. 배열 생성 시 dtype 인자를 사용하여 이를 수행할 수 있습니다.

다양한 데이터 타입은 서로 다른 양의 메모리를 사용합니다:

  • int32는 요소당 4 바이트를 사용합니다.
  • int64는 요소당 8 바이트를 사용합니다.
  • float32는 요소당 4 바이트를 사용합니다.
  • float64는 요소당 8 바이트를 사용합니다.

대규모 배열의 경우 올바른 데이터 타입을 선택하면 상당한 메모리를 절약하고 잠재적으로 성능을 향상시킬 수 있습니다.

배열을 생성하고 데이터 타입을 32 비트 부동소수점 (float) 으로 지정해 보겠습니다. main.py 파일을 다음 코드로 수정하세요. 이전 단계의 코드는 주석 처리하거나 제거할 수 있습니다.

## 배열을 생성하고 데이터 타입을 float32 로 지정합니다.
## dtype 매개변수는 NumPy 에게 각 숫자를 32 비트 부동소수점으로 저장하도록 지시합니다.
arr_float = np.array([1.0, 2.5, 3.8], dtype=np.float32)

## 데이터 타입과 배열을 출력합니다.
print("Data type of arr_float:", arr_float.dtype)
print("Array arr_float:", arr_float)

파일을 저장하고 다시 실행하세요.

python main.py

출력에는 지정한 float32 데이터 타입으로 배열이 생성되었음을 보여줍니다.

Data type of arr_float: float32
Array arr_float: [1.  2.5 3.8]

float32에 대해 'f4', int64에 대해 'i8', 또는 불리언 (boolean) 에 대해 np.bool_과 같이 다양한 데이터 타입 문자열이나 NumPy 객체를 사용할 수 있습니다.

배열 데이터 유형 변환하기

배열이 생성된 후에는 데이터 타입을 변환해야 할 수도 있습니다. .astype() 메서드가 이 목적으로 사용됩니다. 이 메서드는 원본 배열을 변경하지 않고 지정된 데이터 타입을 가진 새 배열을 반환합니다.

타입 변환은 다음과 같은 경우에 유용합니다:

  • 특정 데이터 타입을 요구하는 연산을 수행해야 할 때
  • 더 작은 타입으로 변환하여 메모리 사용량을 줄여야 할 때
  • 특정 타입을 기대하는 함수를 위해 데이터를 준비해야 할 때

정수 배열을 생성한 다음 부동소수점 배열로 변환해 보겠습니다. main.py 파일을 다음 코드로 업데이트하세요:

## 정수 배열 생성
## np.arange(5) 는 0 부터 4 까지의 숫자를 포함하는 배열을 생성합니다 (총 5 개 요소).
original_arr = np.arange(5)
print("Original array:", original_arr)
print("Original dtype:", original_arr.dtype)

## 배열을 float64 로 변환
## .astype() 은 지정된 데이터 타입을 가진 새 배열을 생성합니다.
converted_arr = original_arr.astype(np.float64)
print("Converted array:", converted_arr)
print("Converted dtype:", converted_arr.dtype)

파일을 저장하고 실행하세요.

python main.py

출력은 original_arr은 정수 배열로 유지되는 반면, converted_arrfloat64 데이터 타입을 가진 새 배열임을 보여줍니다.

Original array: [0 1 2 3 4]
Original dtype: int64
Converted array: [0. 1. 2. 3. 4.]
Converted dtype: float64

이는 원본 데이터를 잃지 않고 타입 변환을 수행하는 안전한 방법입니다.

다른 데이터 유형 작업하기

NumPy 는 정수 및 부동소수점뿐만 아니라 불리언 (boolean) 및 복소수 (complex numbers) 를 포함한 광범위한 데이터 타입을 지원합니다. NumPy 가 이러한 데이터 타입을 어떻게 처리하는지 이해하는 것은 매우 유용할 수 있습니다.

불리언 배열은 특히 다음과 같은 경우에 유용합니다:

  • 데이터 필터링 (특정 조건을 만족하는 요소 선택)
  • 논리 연산
  • 배열 마스킹

예를 들어, True/False 조건을 나타내는 불리언 값 배열을 생성할 수 있습니다.

불리언 배열을 생성해 보겠습니다. main.py 파일을 업데이트하세요:

## 불리언 배열 생성
## np.bool_는 NumPy 의 불리언 데이터 타입입니다 (True/False 값을 저장합니다).
arr_bool = np.array([True, False, True], dtype=np.bool_)

print("Boolean array:", arr_bool)
print("Boolean array dtype:", arr_bool.dtype)

스크립트를 저장하고 실행하세요.

python main.py

출력은 불리언 배열과 해당 데이터 타입을 보여줍니다.

Boolean array: [ True False  True]
Boolean array dtype: bool

np.issubdtype() 함수를 사용하여 데이터 타입이 일반 범주 (예: 정수 또는 부동소수점) 에 속하는지 확인할 수도 있습니다. 이는 여러 숫자 타입을 처리할 수 있는 함수를 작성할 때 유용합니다.

요약

이 실습에서는 NumPy 에서 데이터 타입으로 작업하는 기본 사항을 배웠습니다. 이제 다음을 이해하게 되었습니다:

  • NumPy 배열이란 무엇이며 Python 리스트보다 효율적인 이유
  • np.array()np.arange()를 사용하여 배열을 생성하는 방법
  • .dtype 속성을 사용하여 배열의 데이터 타입을 확인하는 방법
  • dtype 매개변수를 사용하여 배열 생성 시 데이터 타입을 지정하는 방법
  • .astype() 메서드를 사용하여 배열의 데이터 타입을 변환하는 방법
  • 다양한 데이터 타입 (int32, int64, float32, float64) 의 메모리 영향
  • 필터링 및 논리 연산을 위한 불리언 배열 작업 방법

데이터 타입에 대한 탄탄한 이해는 NumPy 를 사용하여 효율적이고 정확한 수치 코드를 작성하는 데 필수적입니다. 올바른 데이터 타입을 선택하는 것은 데이터 분석 프로젝트의 메모리 사용량과 계산 성능 모두에 상당한 영향을 미칠 수 있습니다.