티스토리 뷰

Matrix Transposes

 - 대각원소를 기준으로 뒤집는것.

 - 그런데 이 transpose에서 중요하게 짚고 넘어가야할 부분이 있다.



 - transpose를 하려는 행렬 A가 정방행렬이 아닐 경우, transpose 이후 기존의 차원이 뒤집힌 채 shape이 바뀐다.

 - 또한 열은 행으로 행은 열로 데이터들이 바뀜

 - transpose는 shape이 다른 두 행렬간의 연산을 필요로 할 때 유용하게 쓰일 수 있다.

 - 하지만 그 연산 결과가 내가 원하는(의도한)결과인지 고민하여 처리하여야 한다.



- 행렬의 shape의 크기가 다른 두 행렬에 대해 product를 진행하려면

 - transpose를 하거나, 행렬의 순서를 바꿔 계산하는 방법이 있다.

 - 그 각각의 연산 결과는 transpose 관계에 있다.

 - 즉, 결과값으로 내가 원하는 차원에 맞게 행렬간 곱셈의 연산을

 - transpose로 처리 할 것인지, 순서를 바꿔서 처리할 것인지 결정하면 된다.

 - 위의 결과는 우리가 최초에 행렬 A의 관련 데이터들을 행(row)으로 가지고 있을떄 가능하다.

 - 관련 데이터들을 행으로 가지고있는 행렬에 대해선 transpose 또는 행렬 A, B의 순서를 바꿔 계산하여도

 - 우리가 얻고자하는 최종 데이터의 값에 변화가 없다.

 - 그러나 관련 데이터들을 열로 가지고 있는경우 위와같은 연산을 진행하면

 - 엉뚱한(서로 관련없는) 연산을 진행하게 되어 의도한 결과값을 도출해 내지 않는다.



결론

- 데이터를 행으로 가지고 있는 행렬끼리의 연산에만 transpose를 사용하여 원하는 결과값을 얻어낼 수 있다!






Transposes in NumPy

 - 넘파이에서 transpose를 하려면 단순하게 T attribute를 이용하면 된다.

 - transpose() 함수를 사용해도 동일한 결과를 리턴하지만 T가 대부분의 용도로 사용됨




 - 넘파이에선 메모리상에서 어떠한 데이터도 이동(변경 또는 수정)하지 않고 transpose한다.

 - 단순하게 해당 행렬에서의 인덱스값만 변경하기 때문.

 - 그렇기때문에 transpose시에 주의해야할 점은, 해당 객체를 transpose로 수정할 때, 동일한 데이터를 공유하므로

 - 원본의 변경에 주의해야한다. 원본 데이터에서도 200이라는 값이 대입되어있는것을 확인하자.

 - 그러므로 transpose 행렬을 별개의 행렬이 아닌, 데이터를 sharing 하고있는 행렬로 인지하고있어야한다.



A real use case

 - 행렬 inputs와 weights 에 대해 product 연산을 처리해야할 경우가 있다.

 - 근데 shape이 다르므로(incompatible shapes) transpose 시켜 계산해야한다.



 - transpose 시켜 계산한결과 다음과 같은 결과가 나왔다.

 


 - 물론 inputs 행렬을 transpose 시켜 연산하여도 되지만 output의 shape이 달라질 뿐 요소의 값은 동일하다.






댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
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 31
글 보관함