[파이썬][numpy] numpy에서 뷰 vs 복사

numpy는 파이썬에서 과학적 계산을 위한 핵심 라이브러리입니다. numpy 배열은 다양한 수학적 연산을 빠르게 수행할 수 있도록 하는데, 배열의 뷰(view)와 복사(copy) 개념은 중요한 부분입니다. 이번 포스트에서는 numpy에서의 뷰와 복사의 차이를 알아보고, 언제 뷰를 사용해야 하는지, 복사가 필요한 경우는 언제인지에 대해 살펴보겠습니다.

뷰(View)란 무엇인가?

뷰는 numpy 배열을 다른 이름으로 참조하는 것을 말합니다. 즉, 원래 배열과 동일한 데이터를 가리키는 새로운 배열을 만드는 것이 아니라, 원본 배열을 가리키는 포인터를 생성하는 것입니다. 일반적으로 numpy 배열의 뷰는 다른 배열들에도 영향을 미칠 수 있습니다. 따라서 뷰를 통해 배열의 일부분을 수정하면, 원본 배열에도 영향이 가게 됩니다.

뷰는 다음과 같은 방법으로 생성할 수 있습니다.

import numpy as np

# 원본 배열
arr = np.array([1, 2, 3, 4, 5])

# 뷰 생성
view_arr = arr.view()

뷰 배열에 변화를 주어도 원본 배열에도 영향이 가는지 확인해보겠습니다.

# 뷰 배열 수정
view_arr[0] = 10

# 원본 배열 확인
print(arr)

위의 코드를 실행하면, 출력 결과로 [10, 2, 3, 4, 5]가 출력되는 것을 확인할 수 있습니다. 뷰 배열을 수정하면 원본 배열도 함께 변경된 것을 알 수 있습니다.

복사(Copy)란 무엇인가?

복사는 numpy 배열의 새로운 사본을 만드는 것을 의미합니다. 즉, 데이터의 복사본을 가진 새로운 배열을 생성하는 것입니다. 복사된 배열은 원본 배열과 독립적으로 존재하며, 한 배열의 수정이 다른 배열에 영향을 주지 않습니다.

복사는 다음과 같은 방법으로 수행할 수 있습니다.

import numpy as np

# 원본 배열
arr = np.array([1, 2, 3, 4, 5])

# 복사 생성
copy_arr = arr.copy()

복사된 배열에 변화를 주어도 원본 배열에는 영향을 미치지 않는지 확인해보겠습니다.

# 복사 배열 수정
copy_arr[0] = 10

# 원본 배열 확인
print(arr)

위의 코드를 실행하면, 출력 결과로 [1, 2, 3, 4, 5]가 출력되는 것을 확인할 수 있습니다.

뷰 vs 복사

뷰와 복사의 가장 큰 차이점은 원본 배열에 대한 의존도입니다. 뷰는 원본 배열을 참조하기 때문에, 원본 배열이 변경되면 뷰 배열도 변경됩니다. 그러나 복사된 배열은 원본 배열과 독립적으로 존재하기 때문에, 원본 배열이 변경되어도 복사된 배열은 영향을 받지 않습니다.

뷰와 복사를 선택하는 기준은 작업의 목적에 따라 다를 수 있습니다. 작업의 목적이 원본 배열의 일부분을 수정하는 것이라면 뷰를 사용하는 것이 효율적입니다. 그러나 원본 배열과 독립적인 배열이 필요하거나 원본 배열을 보존해야 하는 경우에는 복사를 사용해야 합니다.

정리

numpy에서는 뷰와 복사의 개념을 통해 배열을 다룰 수 있습니다. 뷰는 원본 배열과 동일한 데이터를 가리키는 포인터를 생성하고, 복사는 원본 배열의 새로운 사본을 생성합니다. 뷰는 원본 배열에 영향을 주지만, 복사는 독립적으로 존재하며 원본 배열과의 의존도가 없습니다. 이러한 개념을 이해하여 작업의 목적에 맞게 뷰와 복사를 선택하는 것이 중요합니다.