728x90
왜 dot( )을 써야할까?
Dot Product(내적)는 벡터와 행렬 연산에서 가장 기초적이면서 중요한 연산입니다.
- 2개의 벡터를 곱해 하나의 수치(스칼라)로 벡터와 행렬을 곱해 변환을 적용
- 행렬 곱의 기본이자 딥러닝, 선형대수의 핵심
Numpy에서는 np.dot( )으로 이 연산을 쉽게 처리할 수 있습니다.
np.dot의 수학적 정의를 보겠습니다.
두 벡터의 내적은

행렬 곱의 경우에는

입니다.
기본문법
np.dot(a, b)
- a, b : 스칼라, 1D 벡터, 2D 행렬 등
- 반환: 내적 결과 (스칼라 or 배열)
1차원 벡터 내적
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
np.dot(a, b) # → 1×4 + 2×5 + 3×6 = 32
벡터 내적은 "동일한 위치의 값 x 후 모두 더한 값"
2D 행렬 곱 (행렬의 내적)
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
np.dot(A, B)
"""
[[19 22]
[43 50]]
"""
np.dot( )은 2D일 경우 행렬 곱을 수행함 (단순 원소곱 아님)
벡터 내적
M = np.array([[1, 2, 3], [4, 5, 6]])
v = np.array([10, 20, 30])
np.dot(M, v)
"""
[140, 320]
=> [1×10 + 2×20 + 3×30, 4×10 + 5×20 + 6×30]
"""
2차원과 1차원 배열 내적 시, 행별로 벡터 내적을 수행
다만 고차원 배열을 dot을 할 경우
np.dot( )은 마지막 차원과 두 번째 마지막 차원만 맞춰줍니다.
이럴 땐 np.matmul( ) 또는 @ 연산자 사용을 권장한다고 합니다.
np.dot( ) vs @ vs np.matmul( )
| 함수 | 지원 차원 | 연산 의미 | 추천 상황 |
| np.dot() | 1D, 2D까지 안정적 | 내적 or 행렬곱 | 전통적인 계산 |
| @ 연산자 | 1D~ND 지원 | matmul과 동일 | 직관적 코드 |
| np.matmul() | 1D~ND 완전 지원 | 고차원 행렬곱 | 딥러닝 계산 |
Numpy 1.10 이상에서는 @ 사용이 일반화 되었고, matmul이 더 권장됩니다.
하지만 dot()은 여전히 가장 빠르고 직관적인 내적 도구입니다.
선형 모델의 예측 값 계산 예시
X = np.array([[1, 2], [3, 4]]) # feature matrix
w = np.array([0.5, 1.0]) # weight vector
y_pred = np.dot(X, w)
"""
[2.5, 5.5]
"""
선형 회귀, 퍼셉트론, 로지스틱 회귀 등 모든 모델의 핵심
두 이미지 간 유사도 계산 (벡터 내적)
img1 = np.array([0.2, 0.5, 0.3])
img2 = np.array([0.1, 0.4, 0.5])
np.dot(img1, img2) # → 유사도 score
두 벡터 간 각도가 작을수록 결과값이 큽니다. (cosine similarity와 유사)
np.dot()은 내부적으로 C 언어의 BLAS 라이브러리를 호출합니다.
복사 없이 연산을 수행합니다. (in-place아님, 결과는 새 배열)
매우 빠르고, Numpy 연산의 핵심 중 하나
Numpy는 np.dot()을 연산 최적화 대상 함수로 다룹니다.
내부적으로 OpenBLAS / MKL 등 고속 수치 연산 라이브러리를 사용합니다.
728x90
반응형
'python > Pandas | Numpy' 카테고리의 다른 글
| [Numpy] NaN과 inf 다루는 방법 (0) | 2025.05.20 |
|---|---|
| [Numpy] where, argmax, unique, argsort (0) | 2025.05.16 |
| [Numpy] 슬라이싱, 마스킹, 조건 추출 (0) | 2025.05.02 |
| [Numpy] 브로드캐스팅(broadcasting)과 벡터화(vectorization) 연산 (0) | 2025.05.02 |
| [Numpy] ndarray 구조 - 배열의 모양, 차원 ,타입 (0) | 2025.05.02 |
