[Numpy] np.dot (Dot Product)

2025. 5. 26. 09:25·python/Pandas | Numpy
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
'python/Pandas | Numpy' 카테고리의 다른 글
  • [Numpy] NaN과 inf 다루는 방법
  • [Numpy] where, argmax, unique, argsort
  • [Numpy] 슬라이싱, 마스킹, 조건 추출
  • [Numpy] 브로드캐스팅(broadcasting)과 벡터화(vectorization) 연산
Balang
Balang
음악 전공생의 개발일지
  • Balang
    Balang
    Balang
  • 전체
    오늘
    어제
  • 반응형
    • All Post (160)
      • python (47)
        • selenium (4)
        • algorithm (10)
        • Django (6)
        • Pandas | Numpy (22)
      • SQL (9)
      • Data Engineer (36)
      • Data Scientist (3)
      • Data Analysis (11)
      • Computer Science (36)
      • Why? (16)
      • 마음가짐 (2)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Balang
[Numpy] np.dot (Dot Product)
상단으로

티스토리툴바