진박사의 일상

[python] np.dot 할 때 자주 헛갈리는 1D matrix Transpose 문제 본문

프로그래밍

[python] np.dot 할 때 자주 헛갈리는 1D matrix Transpose 문제

진박사. 2021. 5. 4. 21:47

파이썬으로 numpy의 dot 연산을 할 때 자주 헛갈리는 부분이 있어서 메모 차원으로 정리해본다

import numpy as np

a = np.array([1,2,3])
b = np.array([1,2])
print(a.shape) #(3,)
print(b.shape) #(2,)

np.dot(a,b) # error
np.dot(a,b.T) #error

가끔씩 (n,1) ・ (1,m) 의 dot product를 해야하는 상황이 발생한다.

그런데 numpy에서는 vector의 transpose의 경우 주의해야 할 점이 있다. (n,m) matrix의 경우 transpose 하면 (m,n) matrix가 나오지만 (n,) 의 vector는 transpose를 해줘도 (n,)이 나오기 떄문이다. 이것은 우연이 아니라 transpose의 경우 차원을 추가해주지 않기 때문이다.

우리의 상식에서는 1차원 vector를 transpose해주면 (1,n) matrix가 나올 것 같지만 실제로는 1차원 vector의 경우 차원이 하나 뿐이기 때문에 transpose를 해줘도 똑같이 1차원인 것이다.

그러므로 이러한 경우 선언할 때부터 1차원 array가 아닌 2차원 array로 선언을 해주거나

print(a[:,None].shape) #(3,1)
print(b[None,:].shape) #(1,2)
print(np.dot(a[:,None],b[None,:]).shape) #(3,2)

이런 식으로 shape를 변환해줘야 한다.