Python에서 리스트 형태의 NumPy 배열을 단일 NumPy 배열로 변환하는 방법
Python에서 리스트 형태의 NumPy 배열을 단일 NumPy 배열로 변환하는 방법
Python에서 리스트 형태로 저장된 NumPy 배열들을 하나의 NumPy 배열로 합쳐야 하는 경우가 있습니다. 이 문제를 해결하는 방법은 여러 가지가 있으며, 각 방법마다 장단점이 존재합니다.
해결 방법:
np.concatenate
함수 사용:
import numpy as np
# 리스트 형태의 NumPy 배열
arrays = [np.array([1, 2, 3]), np.array([4, 5, 6])]
# `np.concatenate` 함수 사용
combined_array = np.concatenate(arrays)
print(combined_array)
# [1 2 3 4 5 6]
np.concatenate
함수는 가장 일반적으로 사용되는 방법입니다. 이 함수는 리스트 형태의 배열을 입력 받아 하나의 배열로 합쳐줍니다. axis
인자를 사용하여 합쳐지는 방향을 지정할 수 있습니다.
np.vstack
함수 사용:
combined_array = np.vstack(arrays)
print(combined_array)
# [[1 2 3]
# [4 5 6]]
np.vstack
함수는 세로 방향으로 배열을 합쳐주는 함수입니다. np.hstack
함수는 가로 방향으로 배열을 합쳐줍니다.
np.array
함수 사용:
combined_array = np.array(arrays)
print(combined_array)
# [[1 2 3]
# [4 5 6]]
np.array
함수는 리스트를 입력 받아 NumPy 배열로 변환하는 함수입니다. 리스트에 이미 NumPy 배열들이 들어있는 경우, np.array
함수를 사용하여 간단하게 하나의 배열로 변환할 수 있습니다.
- 루프 사용:
combined_array = []
for array in arrays:
combined_array.extend(array)
combined_array = np.array(combined_array)
print(combined_array)
# [1 2 3 4 5 6]
루프를 사용하여 리스트에 있는 모든 배열을 하나의 리스트에 합친 후, np.array
함수를 사용하여 NumPy 배열로 변환하는 방법입니다.
방법 비교:
방법 | 장점 | 단점 |
---|---|---|
np.concatenate | 가장 일반적으로 사용되는 방법 | axis 인자를 사용하여 합쳐지는 방향을 지정해야 함 |
np.vstack /np.hstack | 특정 방향으로 배열을 합쳐야 하는 경우 유용 | np.concatenate 만큼 일반적이지 않음 |
np.array | 리스트에 이미 NumPy 배열들이 들어있는 경우 간단하게 사용 가능 | 리스트에 다른 자료형이 포함되어 있는 경우 오류 발생 |
루프 | 가장 유연한 방법 | 다른 방법들보다 느릴 수 있음 |
선택 기준:
- 합쳐지는 배열의 방향:
np.vstack
/np.hstack
사용 - 리스트에 다른 자료형 포함 여부:
np.array
사용 시 주의 - 속도: 루프 사용 시 속도 저하 가능성
예제 코드
import numpy as np
# 리스트 형태의 NumPy 배열
arrays = [np.array([1, 2, 3]), np.array([4, 5, 6])]
# `np.concatenate` 함수 사용
combined_array = np.concatenate(arrays)
print(combined_array)
# [1 2 3 4 5 6]
# `np.vstack` 함수 사용
combined_array = np.vstack(arrays)
print(combined_array)
# [[1 2 3]
# [4 5 6]]
# `np.array` 함수 사용
combined_array = np.array(arrays)
print(combined_array)
# [[1 2 3]
# [4 5 6]]
# 루프 사용
combined_array = []
for array in arrays:
combined_array.extend(array)
combined_array = np.array(combined_array)
print(combined_array)
# [1 2 3 4 5 6]
- 위 코드는 리스트 형태의 NumPy 배열을 단일 NumPy 배열로 변환하는 4가지 방법을 보여줍니다.
- 각 방법은
np.concatenate
,np.vstack
,np.array
함수와 루프를 사용하여 구현됩니다. - 출력 결과는 모든 방법에서 동일합니다.
추가 예시:
- 3차원 NumPy 배열 리스트를 변환하는 경우
arrays = [np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]), np.array([[[9, 10], [11, 12]], [[13, 14], [15, 16]]])]
combined_array = np.concatenate(arrays)
print(combined_array)
# [[[ 1 2]
# [ 3 4]
# [ 5 6]
# [ 7 8]
# [ 9 10]
# [11 12]
# [13 14]
# [15 16]]]]
axis
인자를 사용하여 합쳐지는 방향을 지정하는 경우
combined_array = np.concatenate(arrays, axis=1)
print(combined_array)
# [[[ 1 2 9 10]
# [ 3 4 11 12]
# [ 5 6 13 14]
# [ 7 8 15 16]]]]
리스트 형태의 NumPy 배열을 단일 NumPy 배열로 변환하는 대체 방법
import numpy as np
# 리스트 형태의 NumPy 배열
arrays = [np.array([1, 2, 3]), np.array([4, 5, 6])]
# `np.fromiter` 함수 사용
combined_array = np.fromiter(itertools.chain(*arrays), dtype=int)
print(combined_array)
# [1 2 3 4 5 6]
np.fromiter
함수는 반복 가능한 객체를 입력 받아 NumPy 배열을 생성합니다. itertools.chain
함수를 사용하여 리스트 형태의 NumPy 배열을 하나의 반복 가능한 객체로 만들 수 있습니다.
np.reshape 함수 사용:
combined_array = np.reshape(arrays, (-1))
print(combined_array)
# [1 2 3 4 5 6]
np.reshape
함수는 배열의 형태를 변환하는 함수입니다. -1
을 사용하면 배열을 1차원 배열로 변환합니다.
Pandas 라이브러리 사용:
import pandas as pd
# 리스트 형태의 NumPy 배열
arrays = [np.array([1, 2, 3]), np.array([4, 5, 6])]
# Pandas DataFrame 생성
df = pd.DataFrame(arrays)
# DataFrame을 1차원 NumPy 배열로 변환
combined_array = df.values.ravel()
print(combined_array)
# [1 2 3 4 5 6]
Pandas 라이브러리를 사용하여 리스트 형태의 NumPy 배열을 DataFrame으로 변환한 후, 1차원 NumPy 배열로 변환할 수 있습니다.
custom 함수 사용:
def combine_arrays(arrays):
combined_array = []
for array in arrays:
combined_array.extend(array)
return np.array(combined_array)
# custom 함수 사용
combined_array = combine_arrays(arrays)
print(combined_array)
# [1 2 3 4 5 6]
위 코드는 리스트 형태의 NumPy 배열을 하나의 배열로 합쳐주는 custom 함수를 정의하고 사용하는 예시입니다.
방법 | 장점 | 단점 |
---|---|---|
np.concatenate | 가장 일반적으로 사용되는 방법 | axis 인자를 사용하여 합쳐지는 방향을 지정해야 함 |
np.vstack /np.hstack | 특정 방향으로 배열을 합쳐야 하는 경우 유용 | np.concatenate 만큼 일반적이지 않음 |
np.array | 리스트에 이미 NumPy 배열들이 들어있는 경우 간단하게 사용 가능 | 리스트에 다른 자료형이 포함되어 있는 경우 오류 발생 |
np.fromiter | 반복 가능한 객체를 사용하여 NumPy 배열 생성 가능 | 리스트 형태의 NumPy 배열을 반복 가능한 객체로 변환해야 함 |
np.reshape | 배열의 형태를 변환하는 데 유용 | 2차원 이상의 배열을 1차원 배열로 변환하는 경우 주의해야 함 |
Pandas 라이브러리 | DataFrame을 사용하여 다양한 데이터 처리 작업 가능 | Pandas 라이브러리를 추가로 설치해야 함 |
custom 함수 | 특정 요구 사항에 맞게 함수를 구현 가능 | 함수 구현에 시간과 노력 필요 |
- 배열의 형태 및 합쳐지는 방향
- 사용 편의성
- 추가 라이브러리 사용 여부
- 특정 요구 사항
- NumPy documentation: hstack:
python list numpy