Python NumPy

NumPy로 배우는 선형대수(Linear Algebra) 기초

PyExplorer 2025. 2. 5. 11:08
728x90

NumPy로 배우는 선형대수(Linear Algebra) 기초

안녕하세요, "Deep Python Studio"에 오신 것을 환영합니다! 오늘은 파이썬의 강력한 데이터 처리 라이브러리인 NumPy를 활용하여 선형대수의 기초를 살펴보겠습니다. NumPy는 벡터, 행렬, 그리고 다양한 수학 연산을 간단하고 효율적으로 처리할 수 있어 데이터 분석과 머신러닝에 필수적인 도구입니다.

이번 포스팅에서는 다음과 같은 내용을 다룹니다:

  1. 선형대수와 NumPy의 관계
  2. 벡터와 행렬의 생성
  3. 기본 연산
  4. 역행렬과 행렬식
  5. 고유값과 고유벡터

1. 선형대수와 NumPy의 관계

선형대수는 데이터 과학과 인공지능에서 핵심적인 역할을 합니다. 머신러닝 알고리즘의 많은 부분이 선형대수에 기반을 두고 있으며, 벡터와 행렬을 다루는 작업이 빈번하게 발생합니다. NumPy는 이러한 작업을 효율적으로 수행하기 위한 최적화된 라이브러리로, 빠르고 직관적인 인터페이스를 제공합니다.

2. 벡터와 행렬의 생성

선형대수의 기초는 벡터와 행렬입니다. NumPy를 사용하여 벡터와 행렬을 쉽게 생성할 수 있습니다.

import numpy as np

# 벡터 생성
vector = np.array([1, 2, 3])
print("벡터:", vector)

# 행렬 생성
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("행렬:\n", matrix)

출력:

벡터: [1 2 3]
행렬:
 [[1 2 3]
 [4 5 6]
 [7 8 9]]

3. 기본 연산

벡터와 행렬의 덧셈, 뺄셈, 스칼라 곱셈, 그리고 점곱 연산은 선형대수의 기본 연산입니다.

덧셈과 뺄셈

# 벡터 덧셈과 뺄셈
v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])

print("벡터 덧셈:", v1 + v2)
print("벡터 뺄셈:", v1 - v2)

스칼라 곱셈

# 스칼라 곱셈
scalar = 3
print("스칼라 곱셈:", scalar * v1)

점곱 (내적)

# 벡터 점곱
print("벡터 점곱:", np.dot(v1, v2))

# 행렬 곱셈
m1 = np.array([[1, 2], [3, 4]])
m2 = np.array([[5, 6], [7, 8]])
print("행렬 곱셈:\n", np.dot(m1, m2))

4. 역행렬과 행렬식

역행렬은 행렬 연산에서 중요한 개념입니다. NumPy를 사용하면 역행렬과 행렬식을 간단히 계산할 수 있습니다.

역행렬 계산

# 역행렬
matrix = np.array([[1, 2], [3, 4]])
inv_matrix = np.linalg.inv(matrix)
print("역행렬:\n", inv_matrix)

행렬식 계산

# 행렬식
det = np.linalg.det(matrix)
print("행렬식:", det)

5. 고유값과 고유벡터

고유값과 고유벡터는 데이터 분석 및 머신러닝에서 PCA(주성분 분석)와 같은 기법에 사용됩니다.

고유값과 고유벡터 계산

# 고유값과 고유벡터
matrix = np.array([[1, 2], [2, 1]])
eigenvalues, eigenvectors = np.linalg.eig(matrix)

print("고유값:", eigenvalues)
print("고유벡터:\n", eigenvectors)

예제: 간단한 응용

다음은 NumPy를 사용하여 시스템의 선형 방정식을 푸는 예제입니다.

선형 방정식 풀이

# Ax = b의 해를 구하기
A = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])

x = np.linalg.solve(A, b)
print("해:", x)

결론

이번 포스팅에서는 NumPy를 활용하여 선형대수의 기초를 살펴보았습니다. 선형대수는 데이터 분석, 머신러닝, 딥러닝 등 다양한 분야에서 활용되는 중요한 주제입니다. NumPy를 활용하면 복잡한 수학 연산도 쉽게 구현할 수 있으니, 앞으로도 꾸준히 학습해 나가시길 바랍니다!