배열의 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
최신글
![[프로그래머스] 잘라서 배열로 저장하기 - 자바](https://develog.co.kr/wp-content/uploads/2025/01/프로그래머스-잘라서-배열로-저장하기-자바-150x150.png)
![[프로그래머스] 붕대 감기 - 자바](https://develog.co.kr/wp-content/uploads/2024/11/프로그래머스-붕대-감기-자바-150x150.png)
![[프로그래머스] 달리기 경주 - 자바](https://develog.co.kr/wp-content/uploads/2024/11/프로그래머스-달리기-경주-자바-150x150.png)