넘파이(Numpy)는 파이썬에서 수학적 계산을 용이하게 하기 위한 라이브러리다. 특히, 고성능의 다차원 배열 객체와 이를 다루기 위한 다양한 도구를 제공한다.
넘파이의 핵심 기능 중 하나는 'ndarray'라 불리는 배열 객체를 제공하는 것이다. ndarray는 'N-dimensional array'의 약자로, 다차원 배열을 의미한다.
import numpy as np
# 1차원 배열 생성
array1 = np.array([1, 2, 3, 4, 5])
print(array1)
# 2차원 배열 생성
array2 = np.array([[1, 2, 3], [4, 5, 6]])
print(array2)
print(array1.shape) # 배열의 형태
print(array1.dtype) # 데이터 타입
print(array1.ndim) # 차원의 수
넘파이는 배열 간의 연산을 쉽게 할 수 있게 해준다.
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 배열의 합
print(a + b) # [5 7 9]
# 배열의 곱
print(a * b) # [ 4 10 18]
# 평균
print(np.mean(a)) # 2.0
# 합계
print(np.sum(a)) # 6
# 최대값
print(np.max(a)) # 3
넘파이 배열은 인덱싱과 슬라이싱이 가능하다, 이를 통해 배열의 특정 부분을 추출하거나 수정할 수 있다.
arr = np.array([1, 2, 3, 4, 5])
# 인덱싱
print(arr[2]) # 3
# 슬라이싱
print(arr[1:4]) # [2 3 4]
넘파이의 브로드캐스팅 기능은 서로 다른 크기의 배열 간 연산을 가능하게 해준다.
arr = np.array([1, 2, 3])
print(arr + 2) # [3 4 5]
이처럼 넘파이를 사용하면, 고차원의 수학적 연산과 데이터 분석이 훨씬 간결하고 효율적으로 이루어진다.
배열을 다룰 때, 배열의 원소 유형(데이터 타입)을 확인하고 배열의 크기를 알아내는 것은 데이터 처리와 분석에 있어 매우 중요한 단계다. 여기서는 NumPy 라이브러리를 사용하여 이 두 가지를 어떻게 수행하는지 살펴보자. NumPy는 과학 계산을 위한 기본 패키지로, 다차원 배열을 효율적으로 다룰 수 있는 강력한 기능을 제공한다.
NumPy 배열의 원소 유형(데이터 타입)은 .dtype
속성을 통해 확인할 수 있다. 이 속성은 배열에 저장된 데이터의 타입을 나타낸다.
import numpy as np
# 정수 배열 생성
int_array = np.array([1, 2, 3, 4])
print(int_array.dtype) # 배열의 데이터 타입 출력
# 실수 배열 생성
float_array = np.array([1.0, 2.0, 3.0, 4.0])
print(float_array.dtype) # 배열의 데이터 타입 출력
위 예제에서 int_array.dtype
은 int64
또는 플랫폼에 따라 int32
를, float_array.dtype
은 float64
를 출력한다. 이는 각각 배열이 정수와 실수 데이터를 저장하고 있음을 나타낸다.
NumPy 배열의 크기는 .shape
속성을 통해 알아낼 수 있다. 이 속성은 배열의 각 차원의 크기를 나타내는 튜플을 반환한다.
import numpy as np
# 2x3 배열 생성
array_2x3 = np.array([[1, 2, 3], [4, 5, 6]])
print(array_2x3.shape) # 배열의 크기 출력
# 3차원 배열 생성
array_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(array_3d.shape) # 배열의 크기 출력
array_2x3.shape
은 (2, 3)
을 출력하여 배열이 2행 3열로 구성되어 있음을 나타낸다. array_3d.shape
은 (2, 2, 2)
를 출력하여 배열이 2개의 2x2 배열로 구성된 3차원 배열임을 나타낸다.
.astype()
메서드는 주로 pandas 라이브러리나 NumPy 라이브러리에서 데이터 타입을 변경할 때 사용된다. 이 메서드를 사용하면, 데이터프레임이나 배열의 기존 데이터 타입을 원하는 데이터 타입으로 쉽게 변환할 수 있다.
NumPy 배열에서 .astype()
메서드를 사용하면, 배열의 데이터 타입을 변경할 수 있다. 예를 들어, 정수형 배열을 실수형 배열로 변환하고 싶은 경우에 유용하다.
import numpy as np
# 예제 배열 생성
arr = np.array([1, 2, 3, 4])
# 배열의 데이터 타입을 int에서 float으로 변경
arr_float = arr.astype(np.float64)
print(arr_float.dtype)
이 코드는 NumPy 배열의 데이터 타입을 정수형(int
)에서 실수형(float64
)으로 변경한 후, 변경된 배열의 데이터 타입을 출력한다.
파이썬 리스트와 넘파이 배열 사이에는 중요한 차이점이 있다:
성능: 넘파이 배열은 파이썬 리스트보다 훨씬 빠른 연산을 제공한다. 이는 넘파이가 고성능의 C 언어로 구현되어 있고 최적화된 연산을 사용하기 때문이다.
메모리 효율성: 넘파이 배열은 연속적인 메모리 할당을 통해 메모리 사용을 최적화한다. 반면, 파이썬 리스트는 메모리에 연속적으로 할당되지 않는다.
기능: 넘파이는 다차원 배열을 지원하며, 선형대수, 통계, 푸리에 변환 등의 복잡한 수학적 연산을 지원한다.
# 파이썬 리스트
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# 넘파이 배열
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 리스트 연산은 각 요소를 개별적으로 처리
print(list1 + list2) # [1, 2, 3, 4, 5, 6]
# 넘파이 배열 연산은 벡터화된 연산을 수행
print(arr1 + arr2) # [5 7 9]
이러한 차이점으로 인해, 대규모 수치 데이터를 다룰 때 넘파이 배열이 더 효율적이며 선호된다.