[머신러닝을 위한 파이썬] Numerical Python (Numpy) Overview and Usage

2024. 12. 22. 23:43MOOC

1. Numpy 개요

  • Numpy는 Python의 고성능 수학 연산 패키지로, 배열(Array) 기반 연산의 표준.
  • 주요 특징:
    • 빠르고 메모리 효율적.
    • 반복문 없이 데이터 배열 처리 가능.
    • 선형 대수 관련 다양한 기능 제공.
    • 대규모 데이터 계산 시 효율적.

2. Numpy 설치 및 실행

# 가상환경 실행 후 Numpy 설치
activate ml_scratch
conda install numpy

# Jupyter Notebook 실행
jupyter notebook

3. 배열 생성

1) 기본 배열 생성

import numpy as np

# 1차원 배열 생성
test_array = np.array([1, 4, 5, 8], float)
print(test_array)
# 출력: [1. 4. 5. 8.]

# 배열 정보
print(test_array.dtype)  # 데이터 타입
print(test_array.shape)  # 배열 크기

2) 다양한 배열 생성

  • arange: 지정된 범위 내 배열 생성.
  • zeros: 0으로 초기화된 배열 생성.
  • ones: 1로 초기화된 배열 생성.
  • empty: 초기화되지 않은 배열 생성.
  • identity: 단위 행렬 생성.
  • eye: 대각선이 1인 행렬 생성.
# 범위 지정
array1 = np.arange(0, 10, 2)  # [0 2 4 6 8]

# 0으로 채워진 배열
array2 = np.zeros((2, 3))  # [[0. 0. 0.] [0. 0. 0.]]

# 1로 채워진 배열
array3 = np.ones((3, 3))  # [[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]]

4. 배열 연산

1) 기본 연산

  • Numpy는 배열 간 사칙 연산을 지원
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 덧셈, 뺄셈, 곱셈, 나눗셈
print(a + b)  # [5 7 9]
print(a - b)  # [-3 -3 -3]
print(a * b)  # [4 10 18]
print(a / b)  # [0.25 0.4 0.5]

2) 행렬 곱

# 행렬 곱
A = np.array([[1, 2], [3, 4]])
B = np.array([[2, 0], [1, 3]])

result = np.dot(A, B)
print(result)
# 출력: [[4 6]
#       [10 12]]

5. 배열 모양 변경

1) Reshape

  • 배열의 크기나 차원을 변경.
array = np.arange(8)  # [0 1 2 3 4 5 6 7]

# 2x4 배열로 변경
reshaped = array.reshape(2, 4)  # [[0 1 2 3] [4 5 6 7]]

2) Flatten

  • 다차원 배열을 1차원으로 변환.
flattened = reshaped.flatten()  # [0 1 2 3 4 5 6 7]

6. 인덱싱과 슬라이싱

1) 인덱싱

  • 특정 요소를 참조.
a = np.array([[1, 2, 3], [4, 5, 6]])

# 특정 요소 접근
print(a[0, 1])  # 2

2) 슬라이싱

  • 배열의 부분 집합 추출
# 행/열 슬라이싱
subset = a[:, 1:]  # 모든 행, 1열 이상
print(subset)  # [[2 3] [5 6]]

7. Broadcasting

  • 배열 크기가 다를 때 연산을 지원.
a = np.array([[1, 2], [3, 4]])
b = np.array([10, 20])

result = a + b
print(result)
# [[11 22]
#  [13 24]]

8. Numpy 성능 비교

import timeit

# 성능 테스트
scalar = 2
vector = list(range(1000000))

# For loop
time1 = timeit.timeit("[scalar * value for value in vector]", globals=globals(), number=1)

# Numpy
time2 = timeit.timeit("np.arange(1000000) * scalar", globals=globals(), number=1)

print("For loop:", time1, "seconds")
print("Numpy:", time2, "seconds")

9. 데이터 로드 및 저장

1) Text 파일 로드 및 저장

# 저장
np.savetxt("data.csv", array, delimiter=",")

# 로드
data = np.loadtxt("data.csv", delimiter=",")

2) Numpy Binary 파일 사용

# 저장
np.save("array.npy", array)

# 로드
array = np.load("array.npy")

요약

  1. 빠른 연산: Numpy는 배열 연산과 행렬 연산에 최적화.
  2. 다양한 기능: Broadcasting, Reshape, Sllicing 등 유연한 데이터 처리.
  3. 효율성: 대규모 데이터 계산 시 성능 향상.
  4. 저장 및 로드: CSV 및 Binary 포맷으로 데이터 관리 가능