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

반응형
    반응형

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

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

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

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

     

    np.concatenate(($a_1$,$a_2$,...), axis=0, out=None, dtype=None, casting = "same_kind")

    • $a_1$,$a_2$,... : 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에 값 추가하기

    'Python > Numpy' 카테고리의 다른 글

    [파이썬] 절대값 출력하기  (2) 2024.03.07
    NumPy를 활용한 다차원 배열의 평탄화  (0) 2023.06.22
    [Numpy] 배열 분할하기(np.split)  (0) 2022.01.03
    [Numpy] 분포함수(distribution)  (0) 2021.11.20
    [numpy] np.linalg  (0) 2021.11.06

    댓글

    Designed by JB FACTORY

    ....