Loading [MathJax]/jax/output/CommonHTML/jax.js

[Numpy] 배열(array) 합치기(np.concatenate)

반응형
반응형

넘파이로 만든 ndarray를 합치는 방법입니다. 

이전 포스팅에서 설명했던 append와는 약간 다릅니다. 

append는 ndarray가 아닌 숫자나 리스트도 추가할 수 있었다면 np.concatente는 ndarray만을 합칩니다.

파라미터는 다음과 같습니다.

 

np.concatenate((a1,a2,...), axis=0, out=None, dtype=None, casting = "same_kind")

  • a1,a2,... : ndarray이며 반드시 같은 shape여야 합니다.
  • axis : 축을 의미하고 0~2까지 가능하고 디폴트는 0입니다. 
  • out : ndarray이며 연결된 배열의 최종 모양을 보여줍니다. 반드시 합쳤을때의 모양과 일치해야합니다.
  • dtype : 타입을 보여주는데 out과 같이 쓸수는 없습니다.
  • casting : {'no','equiv','safe','same_kind','unsafe'} 중의 하나로 넣을 수 있고 발생할 수 있는 데이터 캐스팅의 종류를 제어합니다. 디폴트는 'same_kind' 입니다.

참고로, out, dtype, casting은 잘 쓰진 않습니다.

축에 따라서 수직, 수평, 깊이로 합칠 수 있고 axis로 설정하고 각 축마다 대체 메쏘드가 있습니다.

데이터를 쌓는 자료구조인 stack을 따서 만든 것으로 예상되는데, 

수직(axis=0)일때는 np.vstack, 수평(axis=1)일때는 np.hstack, 깊이(depth)는 np.dstack으로 할 수 있습니다.

 


[배열(array) 합치기]


수직(axis=0)으로 합치기(np.vstack(), np.concatenate(axis=0))

수직으로 합치는 방법입니다. 

row_wize로 더해지며 shape이 같을 때만 합칠 수 있습니다.

(3,3) 행렬인 a에 10배를 해서 b를 만들어서 합치도록 하겠습니다.

 

a = np.arange(9).reshape(3,3)

 

b = a*10

 

합칠때는 튜플로 해당 ndarray를 넣어서 합니다.

np.concatenate((a,b),axis=0) # np.vstack((a,b))

 

수평(axis=1)로 합치기(np.hstack(), np.concatenate(axis=1))

수평으로 합치는 방법으로 column으로 더해집니다.

 

np.concatenate((a,b),axis=1) # np.hstack((a,b))

 

깊이(axis=2)로 합치기(np.dstack(), np.concatenate(axis=2))

깊이로 합치는 방법입니다. 

2차원인 경우 가지고 있는 상태 그대로 쌓습니다. 

비유를 들자면 a와 b 가 하나의 사각형인데 사각형을 위로 쌓는 방식입니다.

정육면체인 경우 정육면체를 쌓게 됩니다.

 

np.concatenate((a,b),axis=2) # np.dstack((a,b))

모양을 살펴보면 다음과 같습니다.

np.concatenate((a,b),axis=2).shape

a와 b는 (3,3) 인데 쌓여서 (3,3,2) 모양이 되었습니다.

 

3차원인 경우도 마찬가지로 ndarray가 그 자체로 쌓이는 것을 볼 수 있습니다.

방금 만들어진 ndarray는 3차원이므로 같은것을 합쳐보겠습니다.

d = np.concatenate((a,b),axis=2)
np.concatenate((d,d),axis=2)

np.concatenate((d,d),axis=2).shape

 

관련 포스팅

[Python/알고리즘] - [자료구조] 스택(Stack)

[Python/Numpy] - [Numpy] ndarray에 값 추가하기

데이터목장님의
글이 좋았다면 응원을 보내주세요!

Designed by JB FACTORY