관리 메뉴

bright jazz music

선형대수 : 8. 전치(transpose) 본문

Math/선형대수

선형대수 : 8. 전치(transpose)

bright jazz music 2022. 7. 27. 08:34

전치

  • 전치는 행과 열을 바꾸는 것이다. 전치행렬은 행과 열을 교환하여 얻는 행렬이다.
  • 행렬 A의 전치는 아래와 같이 표현한다.

 

 

 

전치의 예

LaTeX 수식
$ \begin{align} A &=\begin{pmatrix} 1 & 2& 3\\ 4 & 5 & 6 \end{pmatrix} \\ 
\\ A^T &= \begin{pmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{pmatrix} \end{align}$

$ \begin{align} B &=\begin{pmatrix} a & b\\ c & d \\ e & f\end{pmatrix} \\ 
\\ B^T &= \begin{pmatrix} a & c & e\\ b & d & f \end{pmatrix} \end{align}$

 

 

파이썬에서의 전치의 구현

  • NumPy에서는 행렬을 나타내는 배열명 뒤에 .T를 붙이면 전치된다.
import numpy as np

a = np.array([[1, 2, 3],
              [4, 5, 6]])   #행렬

print(a.T)              # 전치


# [[1 4]
#  [2 5]
#  [3 6]]

 

 

 

행렬곱과 전치

  • 행렬곱(일반적인 행렬의 곱)을 하기 위해서는 앞의 행렬의 열 수와 뒤 행렬의 행 수가 일치해야 한다.
  • 앞의 행렬의 열 수와 뒤 행렬의 행 수가 일치하지 않는 경우가 있다.
  • 이 경우, 행렬을 전치하여 일치시킬 수 있으면 전치하여 행렬곱을 구한다.

아래의 예를 참고하자.

 

  • A는 lxn의 행렬이다.
  • B는 mxn의 행렬이다.
  • 이 때 n과 m이 일치하지 않으면 행렬곱을 할 수 없다.

n != m 따라서 행렬곱 불가

  • 따라서 전치가 가능한지 고려한다.
  • 전치가 가능하여 열과 행을 일치시킬 수 있는 경우 아래와 같이 행렬곱을 할 수 있다.

 

B행렬을 전치하여 열과 행을 일치. 행렬곱 가능

 

전치와 행렬곱 구현

import numpy as np

a = np.array([[0, 1, 2],
              [1, 2, 3]])   #2x3행렬

b = np.array([[0, 1, 2],
              [1, 2, 3]])   #2x3행렬. #앞 행렬의 열과 뒤 행렬의 행 수가 일치하지 않음.
                            #행렬곱 불가

#print(np.dot(a, b))    	행렬곱을 시도할 경우 아래와 같은 에러 발생
				#ValueError: shapes (2,3) and (2,3) not aligned: 3 (dim 1) != 2 (dim 0)

print(np.dot(a, b.T))  	 	#b행렬을 전치하여 행렬곱 수행



#[[ 5  8]
# [ 8 14]]

 

 

실습

#a행렬 또는 b행렬을 전치하고 a와 b의 행렬곱을 구하라


import numpy as np

a = np.array([[0, 1, 2],
              [1, 2, 3]])

b = np.array([[0, 1, 2],
              [2, 3, 4]])



print(np.dot(a.T, b))   #a행렬을 전치하여 행렬곱 수행
print()

print(np.dot(a, b.T))   #a행렬을 전치하여 행렬곱 수행


# [[ 2  3  4]
#  [ 4  7 10]
#  [ 6 11 16]]
# 
# [[ 5 11]
#  [ 8 20]]

 

둘 중에 어떤 것을 어떤 이유로 사용해야 하는가?

 

 

 

 

 

 

 

 

 

 

참고:

https://ko.wikipedia.org/wiki/%EC%A0%84%EC%B9%98%ED%96%89%EB%A0%AC

Comments