메인
투자 노트

벡터의 차원과 행렬의 차원

@5/11/2023
벡터의 차원과 행렬의 차원은 완전히 다른 개념이다. 데이터 모델링 하는데 햇갈려서 정리해둔다.

완전히 틀린 말

3차원 공간 좌표는 3차원 벡터 모양이다. 3차원 행렬은 3차원 큐브 모양이다. 큐브는 3차원 공간이며 따라서 3차원 공간 좌표는 3차원 행렬 안에 담긴다. 3차원 벡터(x,y,z)를 3차원 큐브모양 행렬 안에 넣어서 x,y,z 좌표로 구분할 수 있다.
이 문단은 완전히 틀렸다. 하지만 그럴싸하다. 3차원 행렬은 3차원 공간으로도 볼수 있고, 3차원 벡터는 3차원 공간상의 좌표이니, 3차원 벡터들은 3차원 행렬로 표현해야 하는거 아닌가?

문제는 언어

완전히 다른 개념을 차원이라는 범용적인 단어로 동일하게 표현하니까 완전 잘못된 논리도 말이 되는 문장으로 완성된다. 하지만 차원 말고 다른 단어가 없으니, 잘못된 점을 말로 표현할 수 없다.

벡터는 2차원 행렬과 동일한 말이다.

벡터는 3차원이든 7차원이든 전부 2차원 행렬로 표현된다.
vec2 = [4,7,5] # x,y,z 3차원 벡터 vec7 = [4,7,5,2,5,4,1] # x,y,z,t,o,p,k 7차원 벡터
Python
복사
벡터라고 불리는 정보의 구조가 2차원 행렬인 것이다.
벡터는 “정보”이고 행렬은 “정보의 구조를 담는 틀”이다.
벡터의 차원은 정보의 양을 의미하고, 행렬의 차원은 정보의 복잡도를 의미한다.

정보의 양과 정보의 복잡도가 어떻게 분리될 수 있는가?

이 코드를 보자 a1, a2, a3, a4는 모두 정보의 양이 72로 같지만 정보의 복잡도가 1,2,3,4로 다르다.
a1 = [ # 관측값들 -> 1차원 행렬 (72,) 19,29,39,209,209,309,119,219,319,229,229,329, 10,20,30,100,200,300,110,210,310,120,220,320, 11,21,31,101,201,301,111,211,311,121,221,321, 12,22,32,102,202,302,112,212,312,122,222,322, 15,25,35,105,205,305,115,215,315,125,225,325, 14,24,34,104,204,304,114,214,314,124,224,324, ] a2 = [ # 6개의 관측 시간으로 분류 -> 2차원 행렬 (6,12) [19,29,39,209,209,309,119,219,319,229,229,329], [10,20,30,100,200,300,110,210,310,120,220,320], [11,21,31,101,201,301,111,211,311,121,221,321], [12,22,32,102,202,302,112,212,312,122,222,322], [15,25,35,105,205,305,115,215,315,125,225,325], [14,24,34,104,204,304,114,214,314,124,224,324], ] a3 = [ # 관측값을 4개의 카테고리로 분류 -> 3차원 행렬 (6,4,3) [[19,29,39],[209,209,309],[119,219,319],[229,229,329]], [[10,20,30],[100,200,300],[110,210,310],[120,220,320]], [[11,21,31],[101,201,301],[111,211,311],[121,221,321]], [[12,22,32],[102,202,302],[112,212,312],[122,222,322]], [[15,25,35],[105,205,305],[115,215,315],[125,225,325]], [[14,24,34],[104,204,304],[114,214,314],[124,224,324]], ] a4 = [ # 카테고리를 2개의 대분류로 분류 -> 4차원 행렬 (6, 2, 2, 3) [[[19,29,39],[209,209,309]],[[119,219,319],[229,229,329]]], [[[10,20,30],[100,200,300]],[[110,210,310],[120,220,320]]], [[[11,21,31],[101,201,301]],[[111,211,311],[121,221,321]]], [[[12,22,32],[102,202,302]],[[112,212,312],[122,222,322]]], [[[15,25,35],[105,205,305]],[[115,215,315],[125,225,325]]], [[[14,24,34],[104,204,304]],[[114,214,314],[124,224,324]]], ]
Python
복사
앞서 말했던 3차원 벡터를 3차원 행렬 안에 표현한것이 바로 a3 데이터다.
a3 행렬은 3개의 차원축을 가지기 때문에 x,y,z좌표축으로 데이터를 구분할 수 있다. 그리고 데이터는 3개의 좌표로 구성된 벡터다. 이건 3차원 벡터로 3차원 벡터를 찾는다는 말인데. a4 에서는 동일한 3차원 벡터를 4차원 벡터로 찾아야 한다. 다시 말해서 3차원 벡터를 3차원 행렬 안에 표현할 필요가 전혀 없다는 뜻이다.
벡터라는 말 자체가 2차원 행렬을 의미하는거니까.

행렬의 차원

보통 차원 하면 공간을 떠올리고, 공간 좌표가 벡터이므로 행렬의 차원까지 동일한 의미로 착각하곤 한다.
데이터 단위가 커지면 벡터 차원이 커지는거고, 데이터를 많이 쪼개면 행렬의 차원이 커지는거다.
솔직히 차원이라는 단어를 잘못 써서 햇갈리는거 같다. 영어에서도 행렬의 차원은 Dimension이 아닌 Rank라고 하고 한국어도 차원 말고 차수라는 단어를 쓴다. 근데 코딩할때는 맨날 배열의 차원, 몇차원 배열.. 이런식으로 부르니까 갑자기 엄청나게 햇갈렸다.