오류에 대한 지적이나 질문, 토의 환영합니다. 자유롭게 댓글 남겨주세요!.!
행렬 (Matrix)
- 일반적으로 행렬
요소/원소 (Entry)
행벡터 (Row Vector)
열벡터 (Column Vector)
전치행렬 (Transpose Matrix)
영행렬 (Zero Matrix)
정방행렬 (Square Matrix)
주대각선/주대각원소 (Main Diagonal)
항등행렬 (Identity Matrix)
내적 (inner product)
이고, 행렬, 행렬일 때,
행렬 행렬이 되고,
행렬 의 각 요소 는 의 번째 행벡터와 의 번째 열벡터의 내적을 계산한 결과입니다.
행렬을 곱할 때 각 요소는 독립적이므로, 병렬처리(parallel processing)로 가속할 수 있습니다.
행렬의 구조가 복잡하여 이해하기 어려울 때,
행렬을 추상적인 구조로 분할하면 행렬이나 행렬 연산을 파악하기 쉽습니다.
행렬을 조각(Partition) 단위로 분할하여 생각해도 무방합니다.
행렬은 부분행렬(Submatrix)로 이루어진 직사각형 구조로 확장해서 생각할 수 있습니다.
이런 행렬을 분할행렬(Partitioned Matrix) 혹은 블록행렬(Block Matrix)이라고 합니다.
행렬은 열벡터들의 모임이고 그렇게 본다면 행렬은 행벡터가 됩니다.
행렬은 행벡터들의 모임이고 그렇게 본다면 행렬은 열벡터가 됩니다.
행렬 일 때,
행렬을 구조적으로 보면 행렬은 열벡터입니다.
- vector가 개 있다고 볼 수 있습니다.
다시 말해서, 행렬은 벡터가 개 있습니다.
는 행렬 A가 가지고 있는 열벡터의 선형조합이라고 볼 수 있습니다.
- 위와 같이 벡터 A와 x에 대한 가중치의 합으로 나타낼 수 있습니다.
- 이를 선형조합이라고 합니다.
- 다시말해, 벡터들에 대한 가중치의 합이라고 말하고 이것을 선형조합이라고 합니다.
열공간 (Column space)
행렬 의 열벡터들에 대한 가능한 모든 선형조합의 결과를 모아 집합으로 구성할 수 있습니다.
이 집합을 열공간이라고 하고 라고 표기합니다.
선형시스템 가 해를 가지면,
Ex 1)
- 행렬 의 열벡터의 조합으로 벡터 를 만들 수 있다면,
- 선형시스템 의 해는 존재한다.
선형시스템 가 해가 없으면
Ex 2)
- 행렬 의 열벡터의 조합으로 만들 수 있는 공간은 평면이다.
- 벡터 가 평면에 존재하는 벡터라면, 선형시스템 의 해는 존재한다.
- 그러나, 벡터 가 평면에 벗어난 벡터라면 선형시스템 의 해는 존재하지 않는다.
import numpy as np
s = 3
print("a:", s)
print(np.shape(s))
a: 3
()
a = np.reshape(s, (1,))
print("a:", a)
print(np.shape(a))
a: [3]
(1,)
a = np.reshape(s, (1,1))
print("a:", a)
print(np.shape(a))
a: [[3]]
(1, 1)
a = np.reshape(s, (1,1,1))
print("a:", a)
print(np.shape(a))
a: [[[3]]]
(1, 1, 1)
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24])
print("a:", a)
print(np.shape(a))
a: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
(24,)
A = a.reshape(1,24)
print("A:", A)
print("A:", np.shape(A))
A: [[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]]
A: (1, 24)
A = a.reshape(3,8)
print("A:", A)
print("A:", np.shape(A))
A: [[ 1 2 3 4 5 6 7 8]
[ 9 10 11 12 13 14 15 16]
[17 18 19 20 21 22 23 24]]
A: (3, 8)
A = a.reshape(6,4)
print("A:", A)
print("A:", np.shape(A))
A: [[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]
[17 18 19 20]
[21 22 23 24]]
A: (6, 4)
A = a.reshape(24,1)
print("A:", A)
print("A:", np.shape(A))
A: [[ 1]
[ 2]
[ 3]
[ 4]
[ 5]
[ 6]
[ 7]
[ 8]
[ 9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
[17]
[18]
[19]
[20]
[21]
[22]
[23]
[24]]
A: (24, 1)
A = a.reshape(2, 3, 4)
print("A:", A)
print("A:", np.shape(A))
A: [[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
[[13 14 15 16]
[17 18 19 20]
[21 22 23 24]]]
A: (2, 3, 4)
## error: 벡터 a가 하나의 entry로 되어 있지 않기 때문에 아래의 경우는 모두 에러
# s = np.reshape(a, ())
# s = a.item()
s = a[0]
print(s)
s = a.sum()
print(s)
1
300
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9,], [10, 11, 12]])
print(A)
print(np.shape(A))
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
(4, 3)
T = A.reshape(1, 4, 3)
print(T)
print(np.shape(T))
[[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]]
(1, 4, 3)
T = A.reshape(2, 2, 3)
print(T)
print(np.shape(T))
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
(2, 2, 3)
T = A.reshape(2, 3, 2)
print(T)
print(np.shape(T))
[[[ 1 2]
[ 3 4]
[ 5 6]]
[[ 7 8]
[ 9 10]
[11 12]]]
(2, 3, 2)
a = A.reshape(12,)
print(a)
print(np.shape(a))
[ 1 2 3 4 5 6 7 8 9 10 11 12]
(12,)
s = A[0,0]
print(s)
print(np.shape(s))
s = np.sum(A)
print(s)
print(np.shape(s))
1
()
78
()
T = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9,], [10, 11, 12]]])
print(T)
print(np.shape(T))
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
(2, 2, 3)
A = T.reshape(4, 3)
print(A)
print(np.shape(A))
A = T.reshape(3, 4)
print(A)
print(np.shape(A))
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
(4, 3)
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
(3, 4)
a = T.reshape(12,)
print(a)
print(np.shape(a))
[ 1 2 3 4 5 6 7 8 9 10 11 12]
(12,)
s = T.sum()
print(s)
print(np.shape(s))
78
()
이 글은 프로그래머스 스쿨 인공지능 데브코스 과정에서 공부한 내용을 바탕으로 정리한 글입니다.