파이썬에서 NumPy dot vs matmul
Python에서 배열은 벡터로 처리됩니다. 2 차원 배열은 행렬이라고도합니다. 파이썬에서 그들 사이의 곱셈을 수행 할 수있는 함수가 있습니다. 사용되는 두 가지 메서드는numpy.dot()
함수와@
연산자 (배열의__matmul__
메서드)입니다. 이제 둘 다 동일한 곱셈 기능을 수행하는 것처럼 보일 수 있습니다. 그러나 둘 다에는 약간의 차이가 있으며이 자습서에서 설명합니다.
numpy.dot()
함수는 Python에서 행렬 곱셈을 수행하는 데 사용됩니다. 또한 행렬 곱셈의 조건을 확인합니다. 즉, 첫 번째 행렬의 열 수가 두 번째 행의 개수와 같아야합니다. 다차원 배열에서도 작동합니다. 결과를 저장할 매개 변수로 대체 배열을 지정할 수도 있습니다. 곱하기를위한@
연산자는 동일한 곱셈을 수행하는 데 사용되는 배열의matmul()
함수를 호출합니다. 예를 들면
import numpy as np
a = np.array([[1, 2], [2, 3]])
b = np.array(([8, 4], [4, 7]))
print(np.dot(a, b))
print(a @ b)
출력:
[[16 18]
[28 29]]
[[16 18]
[28 29]]
그러나 다차원 배열 (N> 2 인 N 차원 배열)을 다룰 때 결과는 약간 다릅니다. 아래에서 차이점을 확인할 수 있습니다.
a = np.random.rand(2, 3, 3)
b = np.random.rand(2, 3, 3)
c = a @ b
d = np.dot(a, b)
print(c, c.shape)
print(d, d.shape)
출력:
[[[0.63629871 0.55054463 0.22289276]
[1.27578425 1.13950519 0.55370078]
[1.37809353 1.32313811 0.75460862]]
[[1.63546361 1.54607801 0.67134528]
[1.05906619 1.07509384 0.42526795]
[1.38932102 1.32829749 0.47240808]]] (2, 3, 3)
[[[[0.63629871 0.55054463 0.22289276]
[0.7938068 0.85668481 0.26504028]]
[[1.27578425 1.13950519 0.55370078]
[1.55589497 1.45794424 0.5335743 ]]
[[1.37809353 1.32313811 0.75460862]
[1.60564885 1.39494713 0.59370927]]]
[[[1.48529826 1.55580834 0.96142976]
[1.63546361 1.54607801 0.67134528]]
[[0.94601586 0.97181894 0.56701004]
[1.05906619 1.07509384 0.42526795]]
[[1.13268609 1.00262696 0.47226983]
[1.38932102 1.32829749 0.47240808]]]] (2, 3, 2, 3)
matmul()
함수는 각각 마지막 두 인덱스에 상주하는 요소로서 행렬 스택처럼 배열을 브로드 캐스트합니다. 반면numpy.dot()
함수는 첫 번째 배열의 마지막 축과 두 번째 배열의 마지막 축에 대한 곱의 합으로 곱셈을 수행합니다.
matmul()
과numpy.dot
함수의 또 다른 차이점은matmul()
함수가 스칼라 값으로 배열의 곱셈을 수행 할 수 없다는 것입니다.
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn