반응형

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 활용의 기본 기반이 되므로 반드시 익혀두어야 합니다.
반응형
'Programming' 카테고리의 다른 글
| 파이썬 가상환경(Mac & Windows) 설정 완전 가이드 (0) | 2025.12.08 |
|---|---|
| Matplotlib 완전 정리: 기본 리스트/딕셔너리로 배우는 Line Plot · Scatter Plot · Histogram (0) | 2025.12.08 |
| 파이썬 판다스(Pandas) 완전 정리: DataFrame 생성부터 인덱싱·정렬·그룹화·결측치 처리까지 한 번에 배우기 (0) | 2025.12.08 |
| 파이썬 논리연산자 AND·OR·NOT 완전 정리 + NumPy 논리 연산 활용법 (1) | 2025.12.08 |
| 파이썬 딕셔너리(Dictionary) 완전 정리: 기본 개념부터 추가·수정·삭제·중첩 딕셔너리까지 (0) | 2025.12.08 |