영상처리/OpenCV

배열 병합 및 분리

성혜영 2022. 6. 7. 14:04

여러 배열을 병합한다면 새로운 축을 따라 배열을 연결하게 됨

배열을 병합할 때 입력 배열의 형태가 동일해야 함 즉, 페이지, 행, 열의 모든 모양이 같아야 함

 

stack() : 서로 다른 배열 병합 -> axis 매개 변수를 사용해 새로운 축을 설정

axis=0 :  첫번째 차원을 기준으로 삽입

axis=-1 : 마지막 번째 차원을 기준으로 삽입

축은 이어붙일 차원의 범위를 넘어갈 수 없음

 

import numpy as np



array1 = np.arange(6).reshape(2,3)

array2 = np.arange(6, 12).reshape(2,3)



merge1 = np.stack([array1, array2], axis=0)

merge2 = np.stack([array1, array2], axis=1)



print(merge1)

print(merge2)

<배열의 병합>

[[[ 0  1  2]

  [ 3  4  5]]



 [[ 6  7  8]

  [ 9 10 11]]]

[[[ 0  1  2]

  [ 6  7  8]]



 [[ 3  4  5]

  [ 9 10 11]]]

배열 병합 함수 : np.stack([array1, array2, …], axis=n)

입력 배열은 대괄호를 사용해 하나의 배열로 묶음

대괄호 안의 입력 배열은 모두 동일한 형태여야 하며,

axis를 통해 병합할 때 배열의 축 방향을 설정

-1은 마지막 번째 차원을 나타냄

-> 입력 배열의 차원이 2차원이므로 axis=-1은 axis=2와 같은 의미

 

 

반대로 배열을 분리해서 여러 개의 하위 배열로 나눌 수 있음.

슬라이싱을 통해 배열을 분리할 수 있지만 이 방법은 일부 배열을 잘라내는 방식

split() : 축을 기준으로 하위 배열로 나누어 반환

 

import numpy as np



array = np.arange(10).reshape(2, 5)



detach1 = np.split(array, 2, axis=0)

detach2 = np.split(array, [2,3], axis=1)



print(detach1)

print(detach2)

<배열의 분리>

[array([[0, 1, 2, 3, 4]]), array([[5, 6, 7, 8, 9]])]

[array([[0, 1],

       [5, 6]]), array([[2],

       [7]]), array([[3, 4],

       [8, 9]])]

 

배열은 np.split(array, index, axis=n) 또는 np.split(array, sections, axis=n) 형태로 분리

배열의 분리 방식을 구분하는 요소는 두번째 매개 변수의 데이터 형식

 

detach1의 방식은 입력 배열 array를 index의 개수만큼 axis 방향 기준으로 분리해 하위 배열로 나눔

index의 허용 조건 : 입력 배열의 axis에 해당하는 차원의 크기를 index로 나눴을 때 정수 발생

axis의 허용 조건 : 입력 배열의 차원 수를 넘어갈 수 없음

만약 입력 배열이 6x4 크기의 2차원 배열이고 index=2, axis=1로 사용한다면,

열을 기준으로 2개의 배열로 나눠 세로로 반이 나눠진 6x2 배열이 두 개 반환

 

detach2의 방식은 정수로 이뤄진 1차원 배열을 인수로 사용하며, array[2:3]을 기준으로 나눔

즉, array[:2], array[2:3], array[3:]의 형태로 삼분할

열을 기준으로 나눴으므로 중간에 위차한 2와 7을 기준으로, 좌측과 우측으로 나눠져 세 개로 분리된 배열을 반환

'영상처리 > OpenCV' 카테고리의 다른 글

matrix 클래스  (0) 2022.06.07
배열 연산  (0) 2022.06.07
배열 차원 변형  (0) 2022.06.07
배열의 블록 단위 요소에 접근  (0) 2022.06.07
배열의 개별 단위 요소에 접근 방법  (0) 2022.06.07