Python/NumPy

NumPy 슬라이싱 및 배열의 복사와 뷰

임베디드 친구 2025. 9. 29. 21:41
728x90
반응형

NumPy 슬라이싱 및 배열의 복사와 뷰

안녕하세요! "소프트웨어 공장"에 오신 것을 환영합니다. 오늘은 Python의 강력한 라이브러리인 NumPy에서 배열의 슬라이싱(slicing)과 복사(copy), 그리고 뷰(view)에 대해 자세히 알아보겠습니다. 이 주제는 NumPy를 효율적으로 활용하기 위해 반드시 알아야 하는 핵심 개념입니다. 다양한 예제와 함께 설명하니 끝까지 읽어주세요!


1. NumPy 배열의 슬라이싱

NumPy 배열에서 슬라이싱은 특정 부분을 선택하는 데 사용됩니다. 슬라이싱 구문은 Python 리스트의 슬라이싱과 비슷하지만, 다차원 배열에서도 간단하고 강력하게 사용할 수 있다는 점에서 차별화됩니다.

기본 구문

array[start:stop:step]
  • start: 시작 인덱스 (포함)
  • stop: 종료 인덱스 (포함하지 않음)
  • step: 단계 크기 (기본값은 1)

1차원 배열 슬라이싱 예제

import numpy as np

arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print("원본 배열:", arr)

# 슬라이싱 예제
print("인덱스 2부터 5까지:", arr[2:6])
print("처음부터 5까지:", arr[:6])
print("2부터 끝까지:", arr[2:])
print("모든 요소를 2단계로:", arr[::2])

다차원 배열 슬라이싱 예제

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("원본 배열:\n", matrix)

# 슬라이싱 예제
print("첫 두 행:", matrix[:2, :])
print("첫 두 열:", matrix[:, :2])
print("중앙 값:", matrix[1:2, 1:2])

2. NumPy 배열의 복사와 뷰

NumPy 배열을 조작할 때, 데이터가 실제로 복사되는지 아니면 원본 데이터를 참조하는지 이해하는 것이 중요합니다.

배열의 뷰 (View)

뷰는 원본 배열의 데이터를 공유합니다. 따라서 뷰를 수정하면 원본 배열에도 영향을 미칩니다.

뷰 생성 예제

arr = np.array([10, 20, 30, 40, 50])
view = arr[1:4]

print("원본 배열:", arr)
print("뷰:", view)

# 뷰 수정
view[0] = 99
print("뷰 수정 후 원본 배열:", arr)

위 예제에서, view를 수정하면 원본 배열 arr에도 변경 사항이 반영됩니다.

배열의 복사 (Copy)

복사는 원본 배열과 독립적인 새로운 배열을 생성합니다. 따라서 복사본을 수정해도 원본 배열에는 영향을 미치지 않습니다.

복사 생성 예제

copy = arr.copy()

print("원본 배열:", arr)
print("복사본:", copy)

# 복사본 수정
copy[0] = 100
print("복사본 수정 후 원본 배열:", arr)
print("복사본 수정 후 복사본:", copy)

3. 뷰와 복사의 차이점 요약

특징 뷰(View) 복사(Copy)
데이터 공유 여부 원본 배열과 데이터 공유 원본 배열과 데이터 독립
메모리 사용 메모리를 추가로 사용하지 않음 메모리를 추가로 사용
성능 더 빠름 더 느림
원본에 영향 영향을 미침 영향을 미치지 않음

4. 슬라이싱, 뷰, 복사 활용 사례

큰 배열 처리에서 뷰 활용하기

큰 배열을 처리할 때 메모리를 효율적으로 사용하려면 뷰를 사용하는 것이 좋습니다. 예를 들어, 데이터 분석에서 특정 컬럼만 참조해야 하는 경우 뷰를 활용하면 성능이 크게 향상됩니다.

data = np.random.rand(1000, 1000)
column_view = data[:, 0]  # 첫 번째 열에 대한 뷰 생성

원본 데이터 보호를 위한 복사 사용하기

데이터를 조작해야 하지만 원본 데이터를 보호해야 한다면 복사를 사용하는 것이 적합합니다.

secure_copy = data.copy()
secure_copy[:, 0] = 0  # 첫 번째 열 데이터를 0으로 변경

결론

오늘은 NumPy 배열의 슬라이싱, 복사, 뷰에 대해 알아보았습니다. 이 주제는 데이터를 효율적으로 관리하고 조작하는 데 매우 중요하며, 성능 최적화와 코드 안정성에 큰 영향을 미칩니다. 실제로 코드를 작성하고 실행하며 개념을 확실히 이해해 보세요.

반응형

'Python > NumPy' 카테고리의 다른 글

NumPy Array 기본 산술 연산  (0) 2025.09.30
NumPy 배열의 인덱싱 이해하기  (0) 2025.09.28
NumPy 배열의 데이터 타입 이해하기  (0) 2025.09.27
NumPy 배열의 속성 확인하기  (0) 2025.09.26
NumPy 배열 생성 방법  (0) 2025.09.25