Python numpy에서 hstack/vstack vs append vs concatenate vs column_stack 사용 시기
numpy
는 Python에서 과학 계산을 위한 기본 라이브러리입니다.- 배열(array)을 다루는 다양한 기능을 제공하며, 그 중 배열을 합치는 기능은 데이터 분석과 머신러닝에서 자주 사용됩니다.
- 배열을 합치는 대표적인 함수는
hstack
,vstack
,append
,concatenate
,column_stack
입니다. - 각 함수는 배열을 합치는 방식과 용도가 다르므로, 상황에 맞는 함수를 선택하는 것이 중요합니다.
hstack vs vstack
hstack
은 배열을 수평 방향으로 합칩니다. 즉, 배열의 열을 연결합니다.- 다음 예시를 통해
hstack
과vstack
의 차이를 확인해 보겠습니다.
import numpy as np
# 2개의 1차원 배열
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 수평 방향으로 합치기
hstack_arr = np.hstack((arr1, arr2))
print(hstack_arr) # [1 2 3 4 5 6]
# 수직 방향으로 합치기
vstack_arr = np.vstack((arr1, arr2))
print(vstack_arr) # [[1 2 3]
# [4 5 6]]
append vs concatenate
append
는 배열에 새로운 요소를 추가하는 데 사용됩니다.concatenate
는 여러 배열을 하나의 배열로 합치는 데 사용됩니다.append
는 배열을 변경하는 함수이며,concatenate
는 새로운 배열을 반환하는 함수입니다.
# 새로운 요소 추가
arr1 = np.array([1, 2, 3])
arr1.append(4) # [1 2 3 4]
# 여러 배열 합치기
arr2 = np.array([5, 6, 7])
concat_arr = np.concatenate((arr1, arr2))
print(concat_arr) # [1 2 3 4 5 6 7]
column_stack
column_stack
은 2차원 배열을 열 방향으로 합치는 데 사용됩니다.hstack
과 유사하지만,hstack
은 1차원 배열에도 사용할 수 있습니다.
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
column_stack_arr = np.column_stack((arr1, arr2))
print(column_stack_arr) # [[1 5]
# [3 7]
# [4 8]]
사용 시기 요약
함수 | 용도 |
---|---|
hstack | 배열을 수평 방향으로 합치기 |
vstack | 배열을 수직 방향으로 합치기 |
append | 배열에 새로운 요소 추가 |
concatenate | 여러 배열을 하나의 배열로 합치기 |
column_stack | 2차원 배열을 열 방향으로 합치기 |
추가 정보
numpy.stack
함수는hstack
,vstack
,column_stack
을 포함하는 더 일반적인 함수입니다.- 각 함수의 axis 매개변수를 사용하여 합치는 방향을 지정할 수 있습니다.
예제 코드
import numpy as np
# 1. hstack vs vstack
# 1차원 배열
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 수평 방향으로 합치기
hstack_arr = np.hstack((arr1, arr2))
print(hstack_arr) # [1 2 3 4 5 6]
# 수직 방향으로 합치기
vstack_arr = np.vstack((arr1, arr2))
print(vstack_arr) # [[1 2 3]
# [4 5 6]]
# 2. append vs concatenate
# 새로운 요소 추가
arr1 = np.array([1, 2, 3])
arr1.append(4) # [1 2 3 4]
# 여러 배열 합치기
arr2 = np.array([5, 6, 7])
concat_arr = np.concatenate((arr1, arr2))
print(concat_arr) # [1 2 3 4 5 6 7]
# 3. column_stack
# 2차원 배열
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
# 열 방향으로 합치기
column_stack_arr = np.column_stack((arr1, arr2))
print(column_stack_arr) # [[1 5]
# [3 7]
# [4 8]]
추가 예시
- 3개 이상의 배열을 합치는 경우:
concatenate
함수 사용 - 2차원 배열을 행 방향으로 합치는 경우:
vstack
함수 사용
hstack
, vstack
, append
, concatenate
, column_stack
함수의 대체 방법
간단한 경우 for 루프를 사용하여 배열을 합칠 수 있습니다.
# hstack 대체
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
result_arr = []
for i in range(len(arr1)):
result_arr.append(np.array([arr1[i], arr2[i]]))
print(np.array(result_arr)) # [[1 4]
# [2 5]
# [3 6]]
# vstack 대체
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
result_arr = []
for i in range(len(arr1)):
result_arr.append(np.array([[arr1[i]], [arr2[i]]]))
print(np.array(result_arr)) # [[[1]
# [4]]
# [[2]
# [5]]
# [[3]
# [6]]]
np.insert 함수
np.insert
함수는 배열의 특정 위치에 새로운 요소를 삽입하는 데 사용할 수 있습니다.
# append 대체
arr1 = np.array([1, 2, 3])
new_element = 4
arr1 = np.insert(arr1, len(arr1), new_element)
print(arr1) # [1 2 3 4]
np.tile 함수
np.tile
함수는 배열을 반복하는 데 사용할 수 있습니다.
# concatenate 대체
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
n = 2
result_arr = np.tile(arr1, n)
result_arr = np.concatenate((result_arr, arr2))
print(result_arr) # [1 2 3 1 2 3 4 5 6]
리스트 슬라이싱
리스트 슬라이싱을 사용하여 배열을 합칠 수 있습니다.
# column_stack 대체
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
result_arr = []
for i in range(len(arr1)):
result_arr.append(np.array([arr1[i][0], arr2[i][0], arr1[i][1], arr2[i][1]]))
print(np.array(result_arr)) # [[1 5 2 6]
# [3 7 4 8]]
python numpy