프로그래밍/Python

데이터 과학 필수 라이브러리: NumPy 완벽 가이드

shimdh 2025. 2. 28. 09:19
728x90

데이터 과학 및 머신러닝 분야에서 효율적인 데이터 조작 및 수학적 연산은 필수적입니다. Python의 대표적인 데이터 연산 라이브러리인 NumPy(Numerical Python)다차원 배열(ndarray) 객체와 수치 연산 기능을 제공하는 강력한 도구로, 데이터 분석 및 과학적 컴퓨팅을 위한 기반을 마련해 줍니다.

NumPy는 벡터 및 행렬 연산을 최적화하여 빠른 연산 속도와 메모리 효율성을 제공하며, Pandas, SciPy, TensorFlow 등 다양한 데이터 분석 및 AI 라이브러리에서도 핵심적으로 사용됩니다.

이번 글에서는 NumPy의 핵심 개념, 배열 생성 및 조작, 주요 기능과 활용법을 자세히 살펴보겠습니다.


1. NumPy란 무엇인가?

🔹 NumPy의 핵심 기능

NumPy는 C 및 Fortran으로 구현된 내부 연산 모듈을 사용하여, Python 기본 리스트보다 훨씬 빠른 연산 속도를 제공합니다. NumPy의 주요 특징은 다음과 같습니다.

  • 다차원 배열(ndarray) 지원: 1D, 2D, 3D 이상의 배열을 효율적으로 관리.
  • 벡터화 연산(Vectorized Operations): 반복문 없이도 대량의 데이터를 동시에 처리 가능.
  • 메모리 효율성: 리스트보다 적은 메모리를 사용하여 대규모 데이터 연산 수행.
  • 수학 및 선형 대수 연산: 행렬 연산, 푸리에 변환, 통계 계산 등 지원.

2. NumPy 설치 및 기본 사용법

🔹 NumPy 설치

pip install numpy

설치가 완료되면, Python 코드에서 다음과 같이 NumPy를 불러올 수 있습니다.

import numpy as np

3. NumPy 배열 생성 및 조작

🔹 1차원 및 2차원 배열 생성

NumPy 배열은 np.array() 함수를 사용하여 생성할 수 있습니다.

import numpy as np

# 1D 배열 생성
arr_1d = np.array([1, 2, 3, 4, 5])
print(arr_1d)

# 2D 배열 생성 (행렬)
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr_2d)

결과

[1 2 3 4 5]
[[1 2 3]
 [4 5 6]]

🔹 다양한 방식으로 배열 생성

NumPy는 arange(), linspace(), zeros(), ones() 등을 사용하여 빠르게 배열을 초기화할 수 있습니다.

# 0부터 9까지의 숫자를 포함하는 배열
arr_range = np.arange(10)  

# 0과 1 사이를 5개로 나눈 값
arr_linspace = np.linspace(0, 1, num=5)  

# 모든 요소가 0인 (3x4) 행렬
arr_zeros = np.zeros((3, 4))

# 모든 요소가 1인 (2x2) 행렬
arr_ones = np.ones((2, 2))

print(arr_range)
print(arr_linspace)
print(arr_zeros)
print(arr_ones)

결과

[0 1 2 3 4 5 6 7 8 9]
[0.   0.25 0.5  0.75 1.  ]
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[1. 1.]
 [1. 1.]]

4. 배열 인덱싱 및 슬라이싱

🔹 배열 인덱싱(Indexing)

arr = np.array([10, 20, 30, 40, 50])

# 특정 요소 접근
print(arr[0])  # 10
print(arr[-1]) # 50

🔹 배열 슬라이싱(Slicing)

arr = np.array([10, 20, 30, 40, 50])

# 2번째 요소부터 4번째 요소까지 선택
print(arr[1:4])  # [20 30 40]

# 처음부터 3번째 요소까지 선택
print(arr[:3])   # [10 20 30]

# 2칸씩 건너뛰며 선택
print(arr[::2])  # [10 30 50]

결과

[20 30 40]
[10 20 30]
[10 30 50]

5. 배열 연산 및 벡터화

NumPy 배열은 벡터 연산(Vectorized Operations) 을 지원하여 반복문 없이도 빠르게 연산을 수행할 수 있습니다.

🔹 기본적인 연산

arr = np.array([1, 2, 3, 4])

print(arr + 10)  # [11 12 13 14]
print(arr * 2)   # [2 4 6 8]
print(arr ** 2)  # [1 4 9 16]

🔹 벡터 내적 연산

vector_a = np.array([1, 2])
vector_b = np.array([3, 4])

dot_product = np.dot(vector_a, vector_b)
print(dot_product)  # 1*3 + 2*4 = 11

6. 통계 및 선형 대수 연산

NumPy는 통계 및 수학 연산을 지원하여 데이터 분석에 매우 유용합니다.

🔹 평균, 표준편차, 분산 계산

data = np.array([5, 10, 15, 20])

print("평균:", data.mean())  # 12.5
print("표준편차:", data.std())  # 5.59...
print("분산:", data.var())  # 31.25

🔹 행렬 연산

matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])

# 행렬 곱
matrix_product = np.dot(matrix_a, matrix_b)

print(matrix_product)

결과

[[19 22]
 [43 50]]

🔥 결론: NumPy를 활용한 데이터 과학

NumPy는 대규모 데이터 연산을 최적화하는 강력한 도구로, 데이터 과학, 머신러닝, 딥러닝 등의 다양한 분야에서 필수적으로 사용됩니다.

🎯 핵심 정리

  • NumPy는 다차원 배열(ndarray)과 벡터화 연산을 지원하여 데이터 연산을 최적화함.
  • arange(), linspace(), zeros(), ones() 등 다양한 방법으로 배열 생성 가능.
  • 벡터화 연산을 통해 반복문 없이도 빠른 수학 연산 수행 가능.
  • 행렬 연산, 통계 분석, 선형 대수 연산 등 다양한 기능 제공.

NumPy를 익히면 Pandas, SciPy, TensorFlow 등 다양한 라이브러리와 함께 활용할 수 있는 기반이 마련되므로, 실제 프로젝트에서도 효과적으로 사용할 수 있습니다! 🚀

728x90