본문 바로가기
머신러닝을 위한 파이썬 기초/넘파이

[파이썬 numpy] 벡터와 행렬의 연산 이해하기

by bigpicture 2024. 10. 12.
반응형

벡터와 행렬의 연산에는 numpy의 dot product를 사용하면 됩니다.

 

dot product는 우리가 흔히 아는 행렬의 곱셈입니다. 차이가 있다면 3x3행렬과 행벡터를 곱해도 곱셈이 수행됩니다. 열벡터로 바꿔주지 않아도 알아서 곱셈이 수행됩니다.

 

몇가지 곱셈을 봅시다.

 

3x3 행렬과 벡터 사이의 곱을 해봅시다. 아래와 같이 3x3 행렬과 벡터 하나를 정의했습니다.

import numpy as np

A=np.array([[1,2,3],[10,20,30],[100,200,300]])
b=np.array([4,5,6])

 

위 행렬과 벡터를 곱할 때는 dot 연산자를 사용합니다.

>>> np.dot(A,b)
array([  32,  320, 3200])

 

아래 곱셈의 결과와 같습니다.

 

$$  \begin{bmatrix}1 & 2 & 3 \\10 & 20 & 30 \\100 & 200 & 300 \\\end{bmatrix}\begin{bmatrix}4 \\5 \\6\end{bmatrix}  $$

 

선형대수에서 행렬과 벡터를 곱할 때는행백터와 열벡터를 구분해주어야 합니다만, dot 연산자에서는 알아서 계산을 해줍니다.

 

열벡터를 만들어서 곱할 수도 있습니다. b를 열벡터로 만들면 아래와 같습니다.

b2=np.array([[4],[5],[6]])

>>> b2
array([[4],
       [5],
       [6]])

 

위에서 정의한 행렬 A와 b2를 곱하면 결과는 아래와 같습니다.

>>> np.dot(A,b2)
array([[  32],
       [ 320],
       [3200]])

 

결과가 열벡터입니다.

 

선형대수의 규칙으로 보면 위와 같이 행렬이 먼저 나오는 곱셈에서는 열벡터를 곱하는게 맞습니다. 행벡터와의 곱은 정의되지 않습니다. 예를 들면 아래와 같은 곱은 정의되지 않습니다.

 

$$  \begin{bmatrix}1 & 2 & 3 \\10 & 20 & 30 \\100 & 200 & 300 \\\end{bmatrix}\begin{bmatrix}4 & 5 & 6 \\\end{bmatrix} $$

 

그런데 넘파이 dot 에서는 정의가 됩니다. 아래 행렬과 벡터를 다시 가져옵시다.

A=np.array([[1,2,3],[10,20,30],[100,200,300]])
b=np.array([4,5,6])

 

3x3 행렬 A와 행벡터 b 입니다. b가 열벡터로 취급되어 곱해집니다. 곱셈 결과는 행벡터입니다.

 

b*A 일때는 계산이 어떻게 될까요? 이때는 b가 행벡터로 취급되어 계산됩니다.

반응형

댓글