Python/NumPy

NumPy 배열의 연결과 분리 (concatenate, split)

임베디드 친구 2025. 10. 4. 20:07
반응형

NumPy 배열의 연결과 분리 (concatenate, split)

안녕하세요! 오늘은 Python의 강력한 데이터 처리 라이브러리인 NumPy에서 배열을 연결하고 분리하는 방법에 대해 알아보겠습니다. 데이터 분석과 과학 계산에서 데이터를 다루다 보면 여러 배열을 합치거나 쪼개야 할 일이 자주 발생합니다. NumPy는 이러한 작업을 효율적으로 수행할 수 있는 다양한 함수를 제공합니다.

1. 배열 연결 (Concatenate)

NumPy에서는 numpy.concatenate 함수를 사용하여 배열을 연결할 수 있습니다. 이 함수는 주어진 축(axis)을 기준으로 두 개 이상의 배열을 이어 붙입니다.

numpy.concatenate 함수 사용법

numpy.concatenate((arr1, arr2, ...), axis=0)
  • arr1, arr2, ...: 연결하려는 배열들입니다. 배열들은 동일한 차원을 가져야 합니다.
  • axis: 배열을 연결할 축을 지정합니다. 기본값은 0입니다.

예제 1: 1차원 배열 연결

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
result = np.concatenate((arr1, arr2))

print("1차원 배열 연결 결과:", result)

출력:

1차원 배열 연결 결과: [1 2 3 4 5 6]

예제 2: 2차원 배열 연결

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

# 행(axis=0)을 기준으로 연결
result_axis0 = np.concatenate((arr1, arr2), axis=0)

# 열(axis=1)을 기준으로 연결
result_axis1 = np.concatenate((arr1, arr2), axis=1)

print("행(axis=0) 기준 연결 결과:\n", result_axis0)
print("열(axis=1) 기준 연결 결과:\n", result_axis1)

출력:

행(axis=0) 기준 연결 결과:
 [[1 2]
 [3 4]
 [5 6]
 [7 8]]

열(axis=1) 기준 연결 결과:
 [[1 2 5 6]
 [3 4 7 8]]

주의사항

연결하려는 배열은 axis를 제외한 다른 축의 크기가 같아야 합니다. 그렇지 않으면 ValueError가 발생합니다.

numpy.vstacknumpy.hstack

vstackhstack은 각각 수직(vertical)과 수평(horizontal)으로 배열을 연결하는 데 사용됩니다.

예제:

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

v_result = np.vstack((arr1, arr2))
h_result = np.hstack((arr1, arr2))

print("수직 연결 결과:\n", v_result)
print("수평 연결 결과:\n", h_result)

출력:

수직 연결 결과:
 [[1 2 3]
 [4 5 6]]

수평 연결 결과:
 [1 2 3 4 5 6]

2. 배열 분리 (Split)

배열을 특정 기준에 따라 나누고 싶을 때는 numpy.split 함수를 사용할 수 있습니다. 이 함수는 배열을 원하는 개수 또는 위치에 따라 분리합니다.

numpy.split 함수 사용법

numpy.split(arr, indices_or_sections, axis=0)
  • arr: 분리하려는 배열입니다.
  • indices_or_sections: 배열을 분리할 기준입니다. 정수로 지정하면 배열이 균등한 크기로 분리됩니다. 리스트로 지정하면 해당 위치에서 분리됩니다.
  • axis: 배열을 분리할 축입니다. 기본값은 0입니다.

예제 1: 1차원 배열 분리

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

# 3개의 균등한 부분으로 분리
result = np.split(arr, 3)
print("1차원 배열 균등 분리 결과:", result)

# 지정된 위치에서 분리
result = np.split(arr, [2, 4])
print("1차원 배열 위치 기반 분리 결과:", result)

출력:

1차원 배열 균등 분리 결과: [array([1, 2]), array([3, 4]), array([5, 6])]
1차원 배열 위치 기반 분리 결과: [array([1, 2]), array([3, 4]), array([5, 6])]

예제 2: 2차원 배열 분리

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

# 행(axis=0)을 기준으로 균등 분리
result_axis0 = np.split(arr, 3, axis=0)

# 열(axis=1)을 기준으로 위치 기반 분리
result_axis1 = np.split(arr, [1, 2], axis=1)

print("행(axis=0) 기준 균등 분리 결과:", result_axis0)
print("열(axis=1) 기준 위치 기반 분리 결과:", result_axis1)

출력:

행(axis=0) 기준 균등 분리 결과: [array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]
열(axis=1) 기준 위치 기반 분리 결과: [array([[1], [4], [7]]), array([[2], [5], [8]]), array([[3], [6], [9]])]

numpy.vsplitnumpy.hsplit

vsplithsplit은 각각 수직(vertical)과 수평(horizontal)으로 배열을 나누는 데 사용됩니다.

예제:

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

v_result = np.vsplit(arr, 2)
h_result = np.hsplit(arr, 2)

print("수직 분리 결과:", v_result)
print("수평 분리 결과:", h_result)

출력:

수직 분리 결과: [array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]])]
수평 분리 결과: [array([[1, 2], [5, 6]]), array([[3, 4], [7, 8]])]

정리

NumPy의 concatenatesplit은 데이터를 합치고 분리하는 데 매우 유용한 도구입니다. 이 외에도 stack, vstack, hstack, vsplit, hsplit과 같은 다양한 관련 함수들이 존재하니 필요에 맞게 활용해 보세요.

반응형