[Numpy] 다중 차원(Dimension) 연산 쉽게 익히기 (꿀팁)

2021. 3. 19. 00:23업무 스킬/Python(파이썬)

728x90

 

포스팅을 보기에 앞서, 이 글을 읽는 사람이 4차원쯤은 머릿속에서 그릴 수 있다. 하면 뒤로 가기를 누르길 바란다.

그럼 시작한다.

1. Axis = Numbering 부터 확인

np.sum([array], axis = # )가 기본 차원 연산자인데, 저 식의 맨뒤 axis = #

즉, 차원의 Numbering이 패턴이 있다. 아래 표를 보자

표처럼 차원이 하나씩 늘어날수록 기존의 차원 Numbering이 하나씩 뒤로 밀리는 것을 볼 수 있다.

예를 들면 1차원에서는 axis = 0이 x 축이였다면, 3차원 배열의 경우 axis = 0의 축은 z 축이 된다.

이 점이 Numpy를 처음 시작할 때 나에게 큰 혼동을 주었고 이제는 뭐 외우게 되었다.

 

2. 한 차원 연산 익히기

그럼 한 차원만 연산해보도록 하자. 코드는 Jupyter NoteBook에서 작성했다.

 

 

 

우선 arr_1이라는 2-Dimension 배열을 만든다. (y=2, x=5)의 배열이 만들어짐이 확인 된다.

그렇다면 이것을 axis = 0 즉 y축으로 mean 값을 구해보자

 

axis = 0 (y축)으로 연산을 했더니 Shape이 (2, 5) → (5, )으로 된 것을 알 수 있다.

즉 Shape의 [0] 번째가 날아가고 [1] 번째만 남았다.

 

다시 한번 해보자.

 

 

 

이번엔 3차원으로 배열을 만들어보자 (z=3, y=2, x=5)의 3차원 배열을 만들었다

역시 이번에도 axis = 0 , z 축을 기준으로 연산해보자

 

Shape가 (3, 2, 5)인 3차원을 axis = 0으로 연산했더니 Shape [0]이 날아가고 (2, 5)만 남았다.

여기서 똑똑한 것들은 '야 당연한걸 뭐 어렵게 검증하고 있냐.'

이럴 거다 그래 나 멍청해서 해봤다. 

 

3. 두 개의 차원 연산 익히기

하지만 여기서 axis를 하나의 차원으로 하지 않고 두개의 차원으로 한다면?

 

Shape가 (3, 2, 5)인 배열을 axis = (1, 2)로 연산을 하였더니

Shape의 [1], [2] 번째가 날아가고 (3, )만 남았다.

그래 이제 드디어 파악이 되었다. 

 

4. 4차원에서 두 개의 차원 연산 익히기

내가 왜 이걸 일일이 해봤냐면 4차원 배열에서의 2차원 연산 때문에 그런다.

진짜 4차원이 머릿속에서도 안 그려지는데 그걸 또 2차원 연산을 하면

어떻게 나오는지 확인하라니 미치고 환장할 노릇이지

 

하지만 이제 이것들을 알아놨으니 이제 4차원의 2차원 연산도 쉽게 결과를

알 수 있다.

 

아래 4차원 배열이 있다.

 

배열을 너무 많으니 여기까지만 붙이고

자 Shape가 (4, 3, 2, 5)인 4차원 배열을 z축과 x축을 기반으로 연산하면

어떤 결과가 나올까? 

 

그래 axis = (1, 3)으로 계산을 하였으니 (4, 2)인 Shape가 결과가 나올 것이다.

나오는 것을 볼 수 있다. 이제 슬슬 머리에 그려지는가? 다중 차원의 연산이 어떻게

이루어지는지 완벽하다고 할 수 없겠지만 실마리를 잡았다 할 수 있을 것이다.

 

코딩하다 보면 천재들은 정말 재수 없다 평범한 사람이 보기에 코딩이 얼마나

어려운지 이해를 못하더라. 평범한 우리 사람들 파이팅.

 

728x90