관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

Numpy 3 - Reshape & 이어 붙이고 나누기 본문

인공지능/Numpy & Pandas

Numpy 3 - Reshape & 이어 붙이고 나누기

huenuri 2024. 7. 31. 13:52

어제 잠이 오지 않아 일어나서 한 단원 학습을 하고 2시 반쯤 잠을 청했다. 일요일이니 자고 싶은 만큼 실컷 자자 하고 알람을 껐다. 신기하게도 5시 40분이 조금 넘어서 일어났다. 근데 내가 무슨 꿈을 꾸었는지 언뜻 생각이 났는데, 그게 바로 자기 전에 공부했던 배열이었다. 프로그래밍으로 무슨 추적을 하면서 도둑을 잡고 누군가에게 쫓기기도 하고 아무튼 이상했지만 재미있는 꿈이었다.

 

일어나자마자 잊어버릴까 싶어서 기록해보기로 했다. 언젠가 책에서 읽은 기억이 나는데, 자신이 어떤 것에 몰입하고 있는지 알아보는 여부는 거기에 관한 꿈을 꾸는가라고 했다. 그러면 한 50% 이상 몰입한 상태라는 것이다. 아마도 난 지금 프로그래밍에 완전 몰입하고 있는 것 같다. 하루종일 이 생각만 하고 있는 게 분명하다.
그래서 오늘 무척 기뻤다. 공부를 제대로 하고 있다는 증거니까. 이제 다음 단원인 reshape에 대해서 학습해보기로 했다.


 

 

 

 

 

이론 3 - Reshape & 이어 붙이고 나누기

 

 

array는 shape의 속성을 가지고 있는데, reshape는 shape를 변경하는데 사용한다. arrange를 찍어보면 1차원 배열이 나온다. 이걸 reshape을 하는데 2x4 배열로 만들어달라고 하면 이렇게 구성이 된다.

 

 

 

 

 

먼저 [0 1 2]와 [3 4 5]를 만들고, 이 두 개를 concatenate라는 함수로 리스트 형태로 합칠 수 있다.

 

 

 

 

 

arrange(4)에서 reshape을 하면 위와 같은 모양이 나온다. matrix를 아래 방향으로 이어 붙이기 위해 axis에 0을 주면 2개의 매트릭스가 아래 방향으로 붙는다.

 

 

 

 

 

axis에 1을 넣으면 가로 방향으로 붙일 수 있다. 첫번째의 행렬이 4x2였다면, 두 번째 행렬은 2x4가 된다.

 

 

 

 

 

 

np.split을 통해서 축을 기준으로 나눌 수도 있다. 16개의 행렬을 4x4로 바꾼 예시이다. matix가 첫 번째 인자, 두 번째는 어느 인덱스로 나눌 것인지가 들어간다. 3을 기준으로 세로축으로 나누었다. 이때 3 이전의 있는 값은 upper로, 아래에는 lower가 들어간다.

 

 

 

 

 

이 예시는 3을 기준으로 세로 방향으로 나누었다.


 

 

 

 

퀴즈 3 - Reshape

 

 

 

 

이 문제는 틀렸다. 일부러 혼자서 풀어보려고 앞의 개념은 아직 살펴보지 않았다. 왼쪽은 열이, 오른쪽에 행의 숫자가 들어가는 거였다.

 

 

 

 


 

 

 

 

실습 4 - Reshape & 이어 붙이고 나누기 1

 


 

 

 

1. 문제 풀기

 

 

 

 

메트릭스 정의를 잘못했다는 에러 메시지가 떴다. 몇 번 시도했지만 잘 되지 않아 영상을 보면서 학습해보기로 했다. 아직 reshape을 어떻게 만드는지 감이 잘 잡히지 않았다.

0부터 7까지 array가 저장되어 있다. array에서 reshape를 가져오는 것였다.


 

 

 

2. 코드 수정하기

 

 

 

array와 reshape의 다른 점은 array는 그냥 한 줄로 배열이 되고, reshape은 배열의 차수에 따라 만들어진다는 것이다. 2차원이니 이런 모양이 되었다.

 

 


 

 

 

 

실습 5 - Reshape & 이어 붙이고 나누기 2

 


 

 

 

 

1. 문제 풀기

 

 

 

 

이 코드는 2차원 배열을 생성하고 변수에 할당한 후 출력하고 있다.

 

 

앞에서 reshape을 했는지 헷갈려서 하나 더 만들어주었더니 오류 메시지가 떴다. 이 부분을 지우고 다시 실행해보니 이번에는 잘 되었다.

 


 

 

 

 

2. 다시 풀어보기

영상을 보니 빼먹은 작업이 여러 개 있었다. 그리고 가로, 세로로 붙이는 axis를 반대로 적었다.

 

 

 

 

 

이 작업을 할 때 꼭 print로 찍어야 한다는 것을 잊지 말자!


 

 

 

 

실습 6 - Reshape & 이어 붙이고 나누기 3

 

 

 


 

 

문제 풀기

앞에서 배웠던 개념 정리를 참고하며 풀어보았다. 아직 처음 하는 거라 암기는 못했으니 말이다.

 

 

 

 

모두 잘 풀었다. 여기서 중요한 것은 세로축과 가로축이 어디인지 잘 파악하는 것이다. 그리고 인덱스를 설정하는데 처음에 0으로 했더니 나누어지지 않았다. 한 줄을 포함하는 거니 1 이상이 되어야 한다는 걸 알게 되었다.


 

 

 

 

 

학습을 마치고

이렇게 해서 이어 붙이고 나누는 것을 배워보았다. 정말 신기하고 재미있었다. 배열을 이렇게 자유롭게 이어 붙일 수 있다는 것을 해보는 새로운 경험이었다. 혼자서 문제를 풀어보려고 노력했는데 이제 어느 정도 감이 잡혔다.
1주 차 수업이 분량이 많아서 아직 3개의 단원이 더 남아있다. 새벽 공부시간에 다 마칠 수 있을지 모르겠지만 열심히 해볼 것이다!

 

난 행과 열이 많이 헷갈린다. HTML/CSS 시간에도 표를 만들 때 처음에 이런 부분 때문에 얼마나 어려웠는지 모른다. 영어로 행이 column이고 열은 row인 줄 알았다. 근데 반대였다.
2차원 배열에서는 이 행과 열을 잘 파악하는 것이 중요한 것 같다. 고등학교 때 수 2에서 행렬을 배웠던 기억이 나기도 했다. 나중에 행렬도 공부해보고 싶다.

'인공지능 > Numpy & Pandas' 카테고리의 다른 글

Numpy 6 - 집계함수 & 마스킹 연산  (0) 2024.07.31
Numpy 5 - 브로드캐스팅  (0) 2024.07.31
Numpy 4 - Numpy 연산  (0) 2024.07.31
Numpy 2 - 배열의 기초  (0) 2024.07.31
Numpy 1 - 배열 만들기  (0) 2024.07.31