[Python] 배열의 Split 메소드 – Numpy Tutorial 6

배열의 Split은 여러 개의 배열을 결합하는 배열 조인의 반대 개념이다. numpy에서 사용되는 조인은 여러 배열을 하나로 합치는 작업이고, Split은 하나의 배열을 여러 배열로 나누는 방법이다. 이를 통해 대량의 데이터를 더 쉽게 관리가 가능하다. 이번 포스팅에서 Split에 사용되는 메소드들을 알아보자.

array_split() 메소드 사용법

array_split() 메소드는 배열을 나누는데 사용되는 기본적인 메소드다.

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])

newarr = np.array_split(arr, 3)

print(newarr)

이 메소드는 배열과 나누고자 하는 배열의 개수를 인자로 받는다. 위 코드를 실행하면 하나의 배열이 작은 배열 3개로 나뉜다.

[array([1, 2]), array([3, 4]), array([5, 6])]

배열의 요소가 6개인 것을 3으로 나누면 2로 떨어져 나온다. 하지만 4로 나누게 되면 어떻게 될까? 코드와 결과를 먼저 보자.

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])

newarr = np.array_split(arr, 4)

print(newarr)
[array([1, 2]), array([3, 4]), array([5]), array([6])]

처음에는 3으로 나눴던 것처럼 2개씩 배열이 생성되다가 나중에 개수가 부족해지자 1개의 요소를 갖는 배열로 바뀌었다. np.array_split는 가능한 한 균등하게 나누지만, 남은 요소는 마지막 부분 배열에 추가하여 최종적으로 4개의 배열을 생성한다.

나누어진 배열에서 요소 출력

array_split 메소드 사용 후, 나누어진 배열의 각 요소를 개별적으로 출력하고 싶다면 배열의 인덱스를 출력하면 된다.

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])

newarr = np.array_split(arr, 3)

print(newarr[0])
print(newarr[1])
print(newarr[2])
[1 2]
[3 4]
[5 6]

2차원 배열 나누기

2차원 배열도 쉽게 나눌 수 있다. array_split은 2차원 배열에서 축을 기준으로 배열을 나눌 수 있는 기능을 제공한다.

import numpy as np

arr = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]])

newarr = np.array_split(arr, 3)

print(newarr)
[array([[1, 2],
       [3, 4]]), 
array([[5, 6],
       [7, 8]]), 
array([[ 9, 10],
       [11, 12]])]

배열은 균등하게 분배되며 2개의 행을 갖는 배열로 분할된다.

split 메소드에서 axis 사용

split 메소드에서는 axis 인자를 설정하여 배열을 세로 또는 가로로 나눌 수 있다. 축을 지정하지 않으면 기본값으로 0이 설정된다.

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18]])

newarr = np.array_split(arr, 3, axis=1)

print(newarr)

위 코드에서 axis = 1로 설정되었으므로 세로 방향으로 진행되었으며, 각 배열은 하나의 열을 가지는 배열로 나누어 졌다.

[array([[ 1],
       [ 4],
       [ 7],
       [10],
       [13],
       [16]]), array([[ 2],
       [ 5],
       [ 8],
       [11],
       [14],
       [17]]), array([[ 3],
       [ 6],
       [ 9],
       [12],
       [15],
       [18]])]

hsplit() 메소드

hsplit() 메소드는 가로 방향으로 배열을 나누는 기능을 제공한다. axis 값을 지정하지 않고도 쉽게 배열을 열 단위로 나눌 수 있는 메소드다.

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18]])

newarr = np.hsplit(arr, 3)

print(newarr)
[array([[ 1],
       [ 4],
       [ 7],
       [10],
       [13],
       [16]]), array([[ 2],
       [ 5],
       [ 8],
       [11],
       [14],
       [17]]), array([[ 3],
       [ 6],
       [ 9],
       [12],
       [15],
       [18]])]

참고 – vstack()과 vsplit(), dstack()과 dsplit()은 기능이다.

배열 요소 찾기 : where() 메소드

where 메소드는 조건에 맞는 배열 요소의 인덱스로 반환한다. 배열에서 특정 값을 찾고자 할 때 사용된다.

#예제1
import numpy as np

arr = np.array([1, 2, 3, 4, 5, 4, 4])

x = np.where(arr == 4)

print(x)

#결과
(array([3, 5, 6]),)

배열에 요소가 4인 인덱스를 출력.

#예제2
import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

x = np.where(arr%2 == 0)

print(x)

#결과
(array([1, 3, 5, 7]),)

배열에 요소가 2로 나뉘었을 때 0인 인덱스를 출력.

#예제3
import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

x = np.where(arr%2 == 1)

print(x)

#결과
(array([0, 2, 4, 6]),)

배열에 요소가 2로 나뉘었을 때 나머지가 1인 인덱스를 출력.

searchsorted() 메소드

searchsorted 메소드는 주어진 배열에서 이진 검색을 수행하여 특정 값을 삽입할 인덱스를 출력한다. searchsorted는 무조건 정렬된 배열에서 사용해야 한다.

단일 값 검색

import numpy as np

arr = np.array([6, 7, 8, 9])

x = np.searchsorted(arr, 7)

print(x)

#결과
1

위 코드는 배열 arr에서 7이 위치할 인덱스를 반환하는 코드다. 7이 인덱스 1에 삽입 되어야하므로 1을 출력한다.

오른쪽에서 검색

import numpy as np

arr = np.array([6, 7, 8, 9])

x = np.searchsorted(arr, 7, side='right')

print(x)

#결과
2

위 코드는 7이 위치할 인덱스를 ‘오른쪽’에서 시작하여 반환하는 코드다. 오른쪽에서 인덱스 2에 삽입 되어야하므로 2를 출력한다.

여러 값 검색

import numpy as np

arr = np.array([1, 3, 5, 7])

x = np.searchsorted(arr, [2, 4, 6])

print(x)

숫자 2는 인덱스 1에, 4는 인덱스 2에, 6은 인덱스 3에 삽입되어야 하므로 [1, 2, 3]의 결과가 반환된다.

참고 – w3schools

최신글

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.