Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 목록처리
- 스프링 시큐리티
- 페이징
- GIT
- 처음 만나는 AI 수학 with Python
- 자료구조와함께배우는알고리즘입문
- ㅒ
- baeldung
- 구멍가게코딩단
- 스프링부트핵심가이드
- 서버설정
- 리눅스
- network configuration
- iterator
- 데비안
- 처음 만나는 AI수학 with Python
- Kernighan의 C언어 프로그래밍
- 알파회계
- 네트워크 설정
- resttemplate
- 티스토리 쿠키 삭제
- 이터레이터
- /etc/network/interfaces
- 자바편
- d
- 코드로배우는스프링웹프로젝트
- 선형대수
- 자료구조와 함께 배우는 알고리즘 입문
- 코드로배우는스프링부트웹프로젝트
- 친절한SQL튜닝
Archives
- Today
- Total
bright jazz music
선형대수 : 8. 전치(transpose) 본문
전치
- 전치는 행과 열을 바꾸는 것이다. 전치행렬은 행과 열을 교환하여 얻는 행렬이다.
- 행렬 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이 일치하지 않으면 행렬곱을 할 수 없다.
- 따라서 전치가 가능한지 고려한다.
- 전치가 가능하여 열과 행을 일치시킬 수 있는 경우 아래와 같이 행렬곱을 할 수 있다.
전치와 행렬곱 구현
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
'Math > 선형대수' 카테고리의 다른 글
선형대수: 10. 역행렬(inverse matrix)과 행렬식(determinant) (0) | 2022.07.29 |
---|---|
선형대수 : 9. 단위행렬 (0) | 2022.07.28 |
선형대수 : 7. 행렬의 요소별 곱(아다마르 곱) (0) | 2022.07.26 |
선형대수 : 7. 행렬의 곱 (0) | 2022.07.25 |
선형대수 : 6. 놈 (노름, norm) (0) | 2022.07.24 |
Comments