행렬연산과 브로드캐스팅(Broadcasting)(2)

행렬의 곱셈

전편에 이어 행렬의 곱셈에 관해서 포스팅하겠습니다.

행렬의 곱셈에는 몇가지 규칙이 있습니다.

즉, 곱셈을 할 때 첫번째 행렬의 열두 번 째 행렬의 행의 차원이 같아야 합니다.

구체적으로 무슨 말인지 아래의 그림에서 알아보겠습니다.

즉, 행렬의 곱셈이 가능하게 하려면, 오른쪽의 행렬을 (3x1)이나 (3x2) 행렬로 바꿔줘야 합니다.

즉 1 X 3    3 X 1          1 X 3    3 X 1 이 되어야지 행렬 곱셈이 가능해 집니다.

예시로 2x2 행렬로 행렬의 곱을 해보겠습니다.

 

 

 

위와 같은 결과값이 나옵니다.

※참고 : 일반 숫자들의 곱셈과는 달리 행렬의 곱셈에서는 순서에 따라 값이 달라집니다.

넘파이에서는 실제 행렬 연산과 달리 폭넓은 브로드캐스팅을 제공해줍니다.

# n차원 x 1차원

a = np.array([[1, 3], [2, 4]])
b = np.array([2, 5])
np.dot(a, b)

# 결과

array([17, 24])

위의 코드는 2x2 행렬과 1x2의 행렬 곱으로 실제 연산으로는 불가능한 행렬곱입니다.

하지만 넘파이에서는 n차원 x 1차원 곱을 가능하게끔 지원해 줍니다.

하지만 이전의 덧셈 연산과 같이 만약 1차원 행렬의 성분의 갯수가 다차원 행렬의 성분의 갯수와 맞지 않다면,

브로드캐스팅 조건에 부합하지 않습니다.

# n차원 x 1차원

a = np.array([[1, 3], [2, 4]])
b = np.array([2, 5, 5])
np.dot(a, b)

# 브로드캐스팅이 조건에 부합하지 않습니다.!!

참조 블로그 : [행렬 이론 03탄] 행렬의 연산 (곱셈) - winner (tistory.com)                                                                           https://jimmy-ai.tistory.com/75