np.dot
참고 사이트 : https://numpy.org/devdocs/reference/generated/numpy.dot.html
1D의 경우 내적
2D의 경우 행렬 곱 (np.matmul 사용을 권장)
nD의 경우 첫번째 행렬의 마지막 axis와, 두번째 행렬의 뒤에서 2번째 axis과의 내적으로 계산된다.
dot(a, b)[i,j,k,m] = np.sum(a[i,j,:] * b[k,:,m])
np.matmul
참고 사이트 : https://numpy.org/doc/stable/reference/generated/numpy.matmul.html
2D의 경우 기존 행렬 곱
두 인수 중 하나가 nD의 경우(n>2), 마지막 두개의 축으로 이루어진 행렬을 나머지 축에 따라 쌓아 놓은 것이라고 생각한다.
즉, 마지막 두개의 행렬을 제외한 행렬의 크기가 일치하여야 한다.
C[i,j,k] = np.sum(A[i,j,:] * B[i,:,k])
주의) 행렬과 스칼라끼리의 곱 연산이 안됨(대신 *를 사용)
np.dot과 np.multiply의 차이 예제
2D 행렬 연산일 경우 동일한 결과가 나온다.
nD(n>2)인 경우 아래와 같이 다른 결과가 나옴으로 유의하여 사용해야 한다.