파이썬에서 NumPy dot vs matmul

Manav Narula 2021년3월24일
파이썬에서 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 Narula
Manav Narula avatar Manav Narula avatar

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