행렬의 곱셈(내적)이 어떻게 이루어지는지 시각적으로 표현

2024. 9. 30. 00:29APPLIED/선형대수학(Linear Algebra)

반응형

 

 

 

 

내적의 구성 성분은 두 벡터 또는 두 행렬의 특정 행과 열 간의 곱셈을 통해 생성되는 값들을 나타내며 두 벡터 간의 관계를 정량화하는 방식이다.
내적은 주로 두 벡터 간의 계산을 통해 이루어지며, 각 벡터는 특정한 크기와 방향을 가지고 있다.
   - 예를 들어, 벡터 \( \mathbf{u} \)와 \( \mathbf{v} \)가 있을 때, 내적은 
     \[
     \mathbf{u} \cdot \mathbf{v} = \sum_{i=1}^{n} u_i v_i
     \]
   - 여기서 \( n \)은 벡터의 차원이며, \( u_i \)와 \( v_i \)는 각각의 성분이다.

행렬의 내적
   - 행렬 곱셈에서 내적은 두 행렬 간의 특정 행과 열 간의 상호작용으로 이해될 수 있다.
   - 예를 들어, 행렬 \( A \)의 \( i \)-번째 행과 행렬 \( B \)의 \( j \)-번째 열 간의 내적은 다음과 같이 계산된다:
     \[
     C[i, j] = A[i, 1] \cdot B[1, j] + A[i, 2] \cdot B[2, j] + A[i, 3] \cdot B[3, j]
     \]
  \

각 성분 간의 관계
   - 내적을 계산할 때, 각각의 성분 \( A[i, k] \)와 \( B[k, j] \)는 내적의 구성 성분으로 작용한다.


내적의 구성 성분은 두 벡터 또는 행렬 간의 곱셈을 통해 생성되는 개별 성분을 의미하며 성분 간의 관계를 정량화하고, 최종적으로 결과를 생성하여 각 성분의 곱이 어떻게 최종 결과에 영향을 미치는지를 이해하는 데 중요하다.

 

 


1. 행렬 곱셈 규칙:
   - 행렬 \( A \)의 행(row)와 행렬 \( B \)의 열(column)을 곱할 때, \( A \)의 한 행과 \( B \)의 한 열에 있는 대응되는 요소들을 곱하고, 그 결과를 더해서 최종 값을 얻다. 이를 내적이라고 부른다.

2. 내적 계산:
   - 행렬 곱셈에서 \( C[i, j] \)는 \( A \)의 \( i \)-번째 행과 \( B \)의 \( j \)-번째 열의 요소들 간의 곱셈의 합으로 계산된다.
   - 여기서 \( k \)는 \( A \)의 열(column)과 \( B \)의 행(row)을 순차적으로 선택하여 곱하는 인덱스이다. 즉, \( A[i, k] \)와 \( B[k, j] \)를 각각 선택하여 곱하는 과정이다.



만약 \( A \)가 \( 2 \times 3 \) 행렬이고, \( B \)가 \( 3 \times 2 \) 행렬이면, 두 행렬을 곱할 때 각 요소는 다음과 같은 형태로 계산된다:

\[
C[i, j] = \sum_{k=0}^{2} A[i, k] \times B[k, j]
\]

- \( A[i, 0] \times B[0, j] \)
- \( A[i, 1] \times B[1, j] \)
- \( A[i, 2] \times B[2, j] \)


 

import numpy as np
import matplotlib.pyplot as plt

# 행렬 A와 B 정의
A = np.array([[1, -3, 0], [7, 5, 9]])
B = np.array([[0, 4], [1, 0], [2, 8]])

# 행렬 곱셈 C = A * B
C = np.dot(A, B)

# 내적 표현을 위한 그래프 준비
fig, ax = plt.subplots()

# 각 행/열 간의 상호작용을 화살표로 시각화
rows_A = ['A의 1행', 'A의 2행']
cols_B = ['B의 1열', 'B의 2열']

# 각 값이 어떻게 계산되는지를 보여주는 히트맵 스타일의 시각화 생성
ax.imshow(np.abs(C), cmap='Blues', interpolation='nearest')

# 히트맵에 텍스트 주석 추가
for i in range(C.shape[0]):
    for j in range(C.shape[1]):
        ax.text(j, i, f'{C[i, j]:.0f}', ha='center', va='center', color='black')

# 축 레이블 설정
ax.set_xticks([0, 1])
ax.set_yticks([0, 1])
ax.set_xticklabels(cols_B)
ax.set_yticklabels(rows_A)

# 그래프 제목 설정
plt.title('행렬 곱셈: A * B (내적 시각화)')
plt.show(), C

 

 

 

■ 각각의 화살표 내적 구성

import numpy as np
import matplotlib.pyplot as plt

A = np.array([[1, -3, 0], [7, 5, 9]])
B = np.array([[0, 4], [1, 0], [2, 8]])
C = np.dot(A, B)

fig, ax = plt.subplots()  # 그림 전체와 축
colors = ['r', 'g', 'b']
rows_A = ['Row 1 of A', 'Row 2 of A']
cols_B = ['Col 1 of B', 'Col 2 of B']

# 화살표 시작위치
positions = [[-1, 1], [1, 1], [0, -2]]

# 내적 
for i in range(A.shape[0]):  # 행 반복
    for j in range(B.shape[1]):
        for k in range(A.shape[1]):  # 각 행의 열과 각 열의 행 반복
            start = np.array(positions[i])  # 화살표 시작 좌표
            end = start + np.array([B[k, j], A[i, k]])  # start에서 추가적인 이동
            
            ax.annotate('', xy=end, xytext=start,
                        arrowprops=dict(facecolor=colors[k], shrink=0.05, width=0.05))
            midpoint = (start + end) / 2  # 중간 지점 계산
            
            ax.text(midpoint[0], midpoint[1], f'{A[i, k]}*{B[k, j]}', fontsize=10, ha='center')

# x축과 y축 범위 설정
ax.set_xlim(-3, 3)
ax.set_ylim(-4, 4)
ax.set_aspect('equal')

ax.set_xticks([])
ax.set_yticks([])

plt.title('Graphical Representation of Matrix Multiplication A * B')
plt.show()​

 

 

  • 화살표: 각각의 화살표는 A의 행과 B의 열이 어떻게 상호작용하는지

 

반응형

'APPLIED > 선형대수학(Linear Algebra)' 카테고리의 다른 글

벡터의 사영(projection)  (0) 2024.09.29
직교기저(Orthogonal Basis)  (0) 2024.09.29
고유치와 고유벡터  (0) 2024.04.10