배열 조작
📋 문서 버전
이 문서는 2개의 버전이 있습니다. 현재 버전 1을 보고 있습니다.
배열 조작
개요
배열 조작(Array Manipulation)은 데이터과학에서 데이터를 효과적으로 처리하고 분석하기 위해 필수적인 기술 중 하나입니다. 배열은 동일한 데이터 타입의 요소를 순차적으로 저장하는 자료구조로, 특히 수치 데이터의 집합을 다루는 데 널리 사용됩니다. 데이터과학에서는 주로 다차원 배열(N-dimensional array)을 활용하여 행렬 연산, 통계 계산, 기계학습 모델 훈련 등 다양한 작업을 수행합니다.
대표적인 배열 조작 라이브러리로는 Python의 NumPy, R의 array, 그리고 최신 프레임워크인 JAX, PyTorch, TensorFlow 등이 있으며, 이들은 고성능의 벡터 연산을 지원하여 대규모 데이터를 효율적으로 처리할 수 있게 해줍니다. 본 문서에서는 배열 조작의 주요 개념, 기능, 그리고 데이터과학에서의 활용 사례를 중심으로 설명합니다.
배열 조작의 기본 개념
배열의 정의와 특성
배열은 인덱스를 통해 접근할 수 있는 순서가 있는 데이터 집합입니다. 1차원 배열은 벡터, 2차원 배열은 행렬, 3차원 이상은 텐서(Tensor)라고도 부릅니다. 배열의 주요 특성은 다음과 같습니다:
- 고정된 크기: 생성 시 크기가 정해지며, 일부 라이브러리에서는 동적으로 크기를 조정할 수 있음.
- 동일한 데이터 타입: 모든 요소는 같은 타입을 가져야 함 (예: float64, int32).
- 메모리 효율성: 연속된 메모리 공간에 저장되어 접근 속도가 빠름.
배열 조작의 목적
배열 조작의 주요 목적은 다음과 같습니다:
주요 배열 조작 기법
1. 배열의 생성
배열은 다양한 방식으로 생성할 수 있습니다.
import numpy as np
# 0으로 채워진 배열
zeros = np.zeros((3, 4))
# 1로 채워진 배열
ones = np.ones((2, 2))
# 특정 값으로 채워진 배열
full = np.full((2, 3), 7)
# 범위 기반 배열
arr = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
2. 차원 조작 (Reshaping)
배열의 형태를 변경하는 작업으로, 데이터의 구조를 분석에 적합하게 맞추는 데 사용됩니다.
data = np.array([1, 2, 3, 4, 5, 6])
reshaped = data.reshape((2, 3)) # 2x3 행렬로 변환
[reshape](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%B0%B0%EC%97%B4%20%EC%9D%B8%EB%8D%B1%EC%8B%B1/reshape)()
는 배열의 총 요소 수가 유지되어야 함.-1
을 사용하면 해당 차원의 크기를 자동 계산:reshape(-1, 2)
→ 열이 2일 때 행 자동 결정.
3. 전치 (Transpose)
행과 열을 바꾸는 작업으로, 특히 행렬 연산에서 중요합니다.
matrix = np.array([[1, 2], [3, 4]])
transposed = matrix.T # 또는 np.transpose(matrix)
고차원 배열에서는 특정 축 순서를 재배치할 수 있습니다.
4. 슬라이싱과 인덱싱
배열의 특정 부분을 선택하거나 수정하는 방법입니다.
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
subset = arr[0:2, 1:3] # 첫 두 행, 두 번째와 세 번째 열
- 부울 인덱싱: 조건에 맞는 요소 추출
arr[arr > 5]
5. 결합과 분할 (Concatenation & Splitting)
여러 배열을 하나로 합치거나, 하나의 배열을 여러 개로 나눕니다.
a = np.array([1, 2])
b = np.array([3, 4])
combined = np.concatenate((a, b)) # [1, 2, 3, 4]
# 수직 결합 (2차원 이상)
vertical = np.vstack((a, b)) # [[1, 2], [3, 4]]
# 분할
split_arr = np.split(combined, 2)
6. 브로드캐스팅 (Broadcasting)
다른 크기의 배열 간 연산을 가능하게 하는 NumPy의 강력한 기능입니다. 작은 배열이 자동으로 큰 배열의 형태에 맞춰 확장됩니다.
A = np.array([[1, 2], [3, 4]])
B = np.array([10, 20])
result = A + B # 각 행에 [10, 20]를 더함
브로드캐스팅 규칙은 차원 수와 크기를 비교하여 적용됩니다.
데이터과학에서의 활용 사례
이미지 데이터 처리
이미지는 일반적으로 3차원 배열(H × W × C)로 표현됩니다 (높이, 너비, 채널). 배열 조작을 통해 이미지 회전, 크기 조정, 정규화 등을 수행합니다.
시계열 데이터 변환
1차원 시계열 데이터를 윈도우 기반으로 2차원 배열로 재구성하여 예측 모델에 입력합니다.
def create_sequences(data, seq_length):
X = []
for i in range(len(data) - seq_length):
X.append(data[i:i+seq_length])
return np.array(X)
머신러닝 데이터 전처리
성능 고려사항
- 메모리 연속성: 배열이 C 연속(C-contiguous)이면 연산이 빠릅니다.
np.ascontiguousarray()
로 보장 가능. - 복사 vs 참조:
reshape()
는 일반적으로 복사 없이 수행되지만,copy()
를 명시적으로 사용해야 할 경우도 있음. - 대용량 데이터:
[dask.array](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EA%B4%80%EB%A6%AC/dask.array)
또는[xarray](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EA%B4%80%EB%A6%AC/xarray)
를 사용하여 메모리에 올리지 않고 조작 가능.
참고 자료
- NumPy 공식 문서
- McKinney, W. (2017). Python for Data Analysis. O'Reilly Media.
- Van Der Walt, S., Colbert, S. C., & Varoquaux, G. (2011). The NumPy array: a structure for efficient numerical computation. Computing in Science & Engineering, 13(2), 22–30.
관련 문서
배열 조작은 데이터과학의 기초이자 핵심 기술입니다. 효율적인 배열 조작을 통해 데이터 처리 속도를 획기적으로 개선하고, 복잡한 분석 작업을 간단하게 만들 수 있습니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.