728x90

축? 차원? axis? dim? 비슷한 듯 달라서 자주 헷갈렸었다.

Numpy와 Tensorflow에서 자주 등장하는 axis, dim의 차이를 정리해보고자 한다.

특히 axis와 dim은 행렬의 연산(concat, stack, sum, max...)의 방향을 설정하는 데 사용되므로, 확실히 짚고 넘어가보자.

 

 axis (축) 

배열의 차원 연산 방향 설정 시, axis의 해석 적용 예시
1차원 축은 axis = 0 하나 뿐이다. (행과 열로 구분되지 않음) dim_1 = np.array([0,1,2])
2차원 axis = 0 : 행 방향 (y 방향, 세로 방향)
axis = 1 : 열 방향 (x 방향, 가로 방향)
dim_2 = np.array([[0,1,2],
                             [3,4,5]])
* shape가 (2,3)

dim_2.sum(aixs=0) = [0+3, 1+4, 2+5]
                               = [3,5,7] (행 방향으로 합)
dim_2.sum(aixs=1) = [0+1+2, 3+4+5]
                               = [3, 12] (열 방향으로 합)
3차원 axis = 0 : 너비 방향 (z 방향)
axis = 1 : 행 방향 (y 방향, 세로 방향)
axis = 2 : 열 방향 (x 방향, 가로 방향)
dim_3 = np.array([[[0,1,2],
                               [3,4,5]],

                               [6,7,8],
                               [9,10,11]]])
* shape가 (2,2,3)

dim_3.sum(aixs=0) = [[0+6, 1+7, 2+8],
                                   [3+9, 4+10, 5+11]]
                               
                                = [[6,8,10],
                                   [12,14,16]]
                                   (너비 방향으로 합)

* 4차원 이상이 되면, 더 이상 행렬 개념으로 이해할 수 없음.

* 주어진 배열의 차원이 무엇이냐에 따라 axis = 0, axis = 1, ...가 가리키는 방향이 달라진다 ! 상대적 개념.

* axis를 지정하지 않고 sum을 할 경우 모든 원소의 합이 계산된다.

 

+ 2차원 배열에 대한 axis 개념을 직관적으로 잘 표현한 도식이 있다.

이미지 출처: jalammar.github.io/visual-numpy/

+ 3차원 배열에 대한 axis 개념을 직관적으로 잘 표현한 도식이 있다.

이미지 출처: https://acdongpgm.tistory.com/140

 

참고 페이지: https://pybasall.tistory.com/129

 


 dim  

* 주의: dim이 dimension(=차원)의 준말이기는 하나, 이때 '차원'의 두 가지 해석에 유의해야 한다.

* dim은 특정 텐서의 속성이기도 하고, 연산 방향을 설정할 때 사용될 수도 있다.

'차원'의 두 가지 의미
벡터나 행렬의 '열' 개수 ex 1. [1,2,3]는 3차원 벡터이다.
ex 2. 이번에는 이진 분류가 아닌 칠진 분류 task이므로, 7차원 벡터로 반환해야 한다.
텐서가 존재하는 '축'의 개수
=> ①
ex 1. [0,1,2]는 1차원 텐서(벡터)이다.

ex 2. [[0,1,2],
          [3,4,5]] 는 2차원 텐서(행렬)이다.

ex 3. [[[0,1,2],
           [3,4,5]],
           [6,7,8],
           [9,10,11]]] 는 3차원 텐서(행렬)이다.

ex 4. 점은 1차원, 직선은 2차원, 정육면체는 3차원!

 

배열의 차원 연산 방향 설정 시, dim의 해석 => ②
1차원 축은 axis = 0 하나 뿐이다. (행과 열로 구분되지 않음)
2차원 dim = 0 : 행 방향 (y 방향, 세로 방향) (* dim= -2)
dim = 1 : 열 방향 (x 방향, 가로 방향) (* dim= -1)
3차원 dim = 0 : 행 방향 (y 방향, 세로 방향) (* dim= -3)
dim = 1 : 열 방향 (x 방향, 가로 방향) (* dim= -2)
dim = 2 : 너비 방향 (z 방향) (* dim= -1)

 

* dim은 주어진 배열의 차원이 무엇이든지 관계 없이 axis = 0, axis = 1, ...가 가리키는 방향이 동일하다.

  속상하게도 axis에서 정한 방향과 다른 부분이 있으니 헷갈리지 말 것!

  그러나 dim=-1, dim=2,.. 이 가리키는 방향은 상대적으로 바뀌게 된다.

 

 

참고 페이지: https://questionet.tistory.com/25

 

 

 


+ a:

len size ndim shape reshape flatten
파이썬 내장 함수 numpy.ndarray 객체의 메서드 (파이썬 list나 string에 사용 불가)

ndarray.XX
첫번째 차원(행)의 원소 개수 행렬의
전체 원소 개수
행렬
전체 차원(dim) 표시
행렬의 shape 출력 배열을
새로운 shape로 변경 (*가능한 조건일 때)
n차원 행렬을 1차월 행렬로 reshape하여 복사본 출력

 

+ 미니배치 처리할 때는: (너비 값 즉 배치 사이즈 , 행 개수, 열 개수) 순서.

 

 

참고 페이지: https://tae-hui.tistory.com/entry/Python-numpy-%EB%B0%B0%EC%97%B4-%ED%81%AC%EA%B8%B0-%ED%98%95%EC%83%81-%ED%99%95%EC%9D%B8shape-ndim-size

https://blog.naver.com/PostView.nhn?blogId=life4happy&logNo=222170909964 

728x90

'개발' 카테고리의 다른 글

colab에서 .py 실행하기  (0) 2022.07.10

+ Recent posts