Programming

NumPy 완전 정리: ndarray 생성부터 reshape, axis, 벡터와 행렬 연산까지 한 번에 배우기

Lucas.Kim 2025. 12. 8. 10:38
반응형

1. NumPy ndarray란 무엇인가?

NumPy의 핵심 자료구조는 ndarray (n-dimensional array) 로, 고성능 수치 계산을 위한 동질적(homogeneous) 배열 구조입니다.

ndarray 특징

  • 모든 요소의 데이터 타입이 동일해야 합니다.
  • 메모리 연속 구조를 사용해 연산 속도가 빠릅니다.
  • 벡터, 행렬, 텐서 연산을 위한 다양한 내장 함수 제공.
  • 머신러닝/딥러닝 라이브러리의 기본 연산 단위로 사용됩니다.

2. ndarray 생성 및 기본 속성

import numpy as np

list1 = [1,2,3]
array1 = np.array(list1)

print(array1)           # [1 2 3]
print(type(array1))     # <class 'numpy.ndarray'>
print(array1.shape)     # (3,)
print(array1.dtype)     # int64

ndarray 기본 속성

  • shape: 배열의 구조(차원 별 요소 개수)
  • dtype: 요소의 데이터 타입
  • ndim: 차원 수(rank)

dtype 변환: astype()

대용량 연산 시 메모리 최적화를 위해 타입 변환은 매우 중요합니다.

array_float = array1.astype("float64")
print(array_float.dtype)     # float64

3. 2차원 배열 생성

array2 = np.array([[1,2,3],
                   [4,5,6]])

print(array2.shape)     # (2, 3)
print(array2.dtype)     # int64

NumPy에서는 1차원은 벡터, 2차원은 행렬, 3차원 이상은 텐서라고 합니다.

4. 배열 생성 함수: arange, zeros, ones

NumPy의 주요 배열 초기화 함수는 다음과 같습니다.

arange(): 연속된 값 배열 생성

sequence_array = np.arange(10)
print(sequence_array)

zeros(): 0으로 초기화된 배열 생성

zero_array = np.zeros((3,2), dtype='int32')

ones(): 1로 초기화된 배열 생성

(코드는 없지만 zeros와 동일 사용)

5. reshape(): 배열 구조 변환

array1 = np.arange(10)

array2 = array1.reshape(2,5)
array3 = array1.reshape(5,2)
array4 = array1.reshape(-1,5)

reshape 핵심 개념

  • 전체 요소 개수는 유지해야 합니다.
  • -1은 자동 계산을 의미하며 매우 유용합니다.

예:

a = np.arange(8)
a3 = a.reshape((2,2,2))   # 3차원 텐서

다시 1차원으로 만들기:

a2 = a3.reshape(-1,1)
a1 = a2.reshape(-1)

6. 배열의 차원 개념: 벡터, 행렬, 텐서

# 1차원 벡터
x = np.array([1,2,3])
print(x.shape)
print(np.argmax(x))   # 최댓값 위치

# 2차원 행렬
y = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(y.shape)
print(np.argmax(y))

# 3차원 텐서
z = np.array([[[1,2,3],[4,5,6],[7,8,9]]])
print(z.shape)

 

  • rank: 차원 수(ndim)
  • shape: 각 차원의 크기
  • dtype: 데이터 타입

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

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

print(arr[:2,1:])   # 앞 2행, 2~3번째 열
print(arr[2,:])     # 마지막 행
print(arr[:,:2])    # 첫 2열
print(arr[1,:2])    # 두 번째 행의 앞 2개

 

NumPy의 슬라이싱은 Pandas보다 더 기본적이며, 머신러닝 데이터 전처리에서 많이 사용됩니다.

8. 벡터의 내적(Inner Product)

내적(dot product)은 두 벡터의 길이가 같아야 하며, 각 요소를 곱하고 모두 더한 값입니다.

a = np.array([2,5,1])
b = np.array([4,3,5])

np.dot(a, b.T)

벡터 내적은 딥러닝의 핵심 연산(가중치 × 입력)에 활용됩니다.

9. 행렬 곱셈(Matrix Multiplication)

행렬 A(행×열)와 B(행×열)는 A의 열 수 = B의 행 수일 때 곱셈이 가능합니다.

a = np.array([[2,1],[1,4]])
b = np.array([[1,2,0],[0,1,2]])

print(np.matmul(a,b))

결과 행렬의 shape

A(row) × B(column)

10. 행렬 곱셈(Matrix Multiplication)

행과 열을 뒤바꾸는 연산입니다.

A = np.arange(9).reshape((3,3))
B = A.T

전치행렬은 선형대수, 머신러닝의 연산식 구성에서 매우 자주 등장합니다.

 

NumPy는 파이썬의 수치 연산을 위한 핵심 라이브러리이며, 벡터·행렬 계산을 빠르고 효율적으로 수행합니다. ndarray 구조를 이해하는 것은 데이터 분석뿐 아니라 딥러닝 모델의 core 연산을 이해하는 데 필수입니다.
이번 글에서 다룬 ndarray 생성 → dtype 변환 → reshape → 슬라이싱 → 벡터/행렬 연산 → 전치행렬은 모든 NumPy 활용의 기본 기반이 되므로 반드시 익혀두어야 합니다.

반응형