안녕하세요. 이번 시간에는 numpy append에 대해 간단히 알아봅시다.

 


 이 메서드는 array의 끝에 matrix를 추가하는 메서드에요. 어떻게 쓰는지 예제를 통해서 알아보겠습니다. 먼저, 2차원 array일 때 쓰는 방법을 익혀 봅시다. append가 되기 전에 matrix는 아래 그림과 같아요.

 

 여기서, 3번째 행에 [9, 10, 11, 12]를 추가하고 싶어요. 어떻게 하면 좋을까요? 일단, 1행 4열짜리 배열로 만들어야 하니, reshape를 이용해서 [9, 10, 11, 12]를 1행 4열짜리 numpy array로 변환합니다. 다음에, axis가 문제인데요. 이것이 0이면, first element를 의미해요. 뭔 말인지 모르겠으니, 아래 코드를 보겠습니다.

 

 

 np.append에서 2번째 인자를 보면 [9, 10, 11, 12]를 numpy array로 떨군 것을 1 by 4로 reshape를 한 것이 보일 겁니다. 다음에, axis = 0이라고 되어 있는데요. 결과를 보고 이야기 해 봅시다.

 

 

 3번째 행에 추가된 것을 볼 수 있어요.

 

 즉, 2차원 배열에서 axis가 0이라는 것은 row임을 알 수 있어요. 기존 [[1, 2, 3, 4], [5, 6, 7, 8]]에서 1행 5열에 5, 2행 5열에 10을 추가하기 위해서는 어떻게 해야 할까요? x열에 추가하는 것이죠? 그림으로 그리면 대략 이런 상황입니다.

 

 

 추가해야 하는 노란색만 보면 2행 1열의 matrix입니다.

 

 

  5번째 줄을 보면 reshape(2, 1)을 했음을 알 수 있는데요. 이는 2행 1열의 matrix를 의미합니다. 그런데, 열에 붙였어요. 따라서, axis는 1을 적어주시면 됩니다.

 

 

 실행 결과는 위와 같습니다. 즉, 2차원 matrix에서 axis=0은 행을, axis=1은 열을 의미해요.

 


 3차원에서는 어떨까요? 행은 axis = 1, 열은 axis = 2를 의미해요. 그러면 axis = 0은 뭘까요? 높이겠죠. 이것도 예제를 보면서 이해해 봅시다. mat는 [[[1, 2], [3,4], [5, 6]], [[7, 8], [9, 10], [11, 12]]], 즉 2 by 3 by 2짜리 배열입니다. 뭔가 복잡해 보이지만 그림으로 나타내 보면 아래와 같아요.

 

 

 얘를 원본 matrix라 합시다. 여기서 요래 추가해 버리고 싶어요. 어떻게 하면 좋을까요?

 

 

 높이에 하나 더 높인 것이니 axis는 0이 될 겁니다. 그런데 뭘 append 했나요? 높이가 1, 행이 2, 열이 3인 것을 추가했어요.

 

 그러면, 추가할 matrix는 높이 1, 2행, 3열짜리로 만들어 버리면 되겠습니다. 이 프로그램의 실행 결과를 봅시다.

 

 

 그러면 높이 3인 곳에 [[[1, 2, 3], [4, 5, 6]]]이 append 되었음을 볼 수 있어요.

 

 

 append를 이렇게 시키려고 합니다. 어떻게 하면 될까요? axis 값부터 봅시다. 어디가 추가되었나요? 높이? 행? 아닙니다. 열에 추가되었습니다. 열이 붙여졌으니, axis는 2가 됩니다. 그런데, 추가된 노란색 행렬은 몇 by 몇 by 몇인가요? 높이는 2이고, 행은 2이고, 열은 1입니다.

 

 따라서 아래와 같이 작성해 주면 됩니다.

 

 보시면, 열에 붙이는 거니까 axis에 2를 넣었습니다. 그리고, 높이 2, 2행 1열짜리 matrix를 넣었어요. 여기까지 보고 뭔가 규칙을 찾으셨는지는 모르겠지만, axis가 2라는 것은 (2, 2, ?)일 때 ? 부분을 의미해요. 그래서, ? 부분 빼고는 같은 값을 가져야 함을 알 수 있어요. 결과를 볼까요?

 

 

 4번째 열이 추가되었음을 알 수 있어요.

 

 

 이렇게 append 하려면 어떻게 해야 할까요? 어디에 추가되었나요? 행에 추가되었어요. 높이, 행, 열 순이니까 axis는 1이 됩니다. 그리고 높이가 2 짜리고, 1행, 3열짜리가 추가되었어요.

 

 그러니 요래 작성하시면 되겠죠?

 

 

 실행 결과는 위와 같습니다. 2차원, 3차원 배열에서 numpy append를 쓰는 방법을 알아보았어요. axis가 조금 생소하실 텐데요. 행을 추가할 것인지, 열을 추가할 것인지, 아니면 높이를 추가할 것인지에 따라서 axis 값이 달라진다. 정도만 기억하시면 좋겠어요. 나머지 부분은 예제를 유심히 보시면 눈치는 채실 수 있을 것이라 생각합니다.