NumPy 복사 및 뷰

Beginner

소개

이 튜토리얼에서는 NumPy 라이브러리의 ndarray 에 대한 복사 (copy) 와 뷰 (view) 의 개념에 대해 배우게 됩니다. copy()view() 함수를 사용하여 기존 배열의 새로운 복사본을 만들거나 배열에 대한 새로운 뷰를 만드는 방법을 배우게 됩니다. 또한 복사와 뷰의 차이점과 서로 다르게 동작하는 방식을 배우게 됩니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 액세스하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.

학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 즉시 해결해 드리겠습니다.

복사 (Copy) 와 뷰 (View) 의 차이점 이해하기

복사와 뷰의 주요 차이점은 copy() 함수는 새로운 배열을 생성하는 반면, view() 함수는 원본 배열의 새로운 뷰를 생성한다는 것입니다. 입력 배열의 새로운 복사본을 만들면 메모리의 다른 위치에 저장되지만, 뷰를 만들면 원본 배열과 동일한 메모리 위치를 가리킵니다. 즉, 입력 배열의 복사본에 가해진 변경 사항은 원본 배열에 영향을 미치지 않으며, 그 반대도 마찬가지입니다. 그러나 뷰에 가해진 변경 사항은 원본 배열에 영향을 미치며, 그 반대도 마찬가지입니다.

복사 없음 또는 배열 할당

NumPy 배열을 다른 배열에 할당하는 경우, 원본 배열의 직접적인 복사본을 생성하지 않습니다. 대신, 동일한 내용과 ID 를 가진 다른 배열을 생성하며, 이는 원본 배열에 대한 참조가 됩니다. 이 참조 배열에 변경 사항을 적용하면, 해당 변경 사항은 원본 배열에 직접 반영됩니다.

import numpy as np

input_arr = np.array([[5,2,7,4],[9,0,2,3],[1,2,3,19]])
print("The Original Array is :\n")
print(input_arr)
print("\nThe ID of array a:")
print(id(input_arr))

b = input_arr #assigning input_arr to b
print("\nNow we make the copy of the input_arr")
print("\nThe ID of b:")
print(id(b))
b.shape = 4, 3 #making some changes to b
print("\nThe Changes on b also reflect to a:")
print(input_arr)

Numpy 복사 또는 Deep Copy (깊은 복사)

copy() 함수를 사용하여 복사본을 만들 때, 이를 딥 카피라고도 합니다. 배열의 복사본은 데이터를 소유하며, 이는 복사본에 가해진 변경 사항이 원본 배열에 영향을 미치지 않고, 그 반대도 마찬가지임을 의미합니다.

입력 배열의 딥 카피를 만들려면 numpy.ndarray.copy() 함수를 사용할 수 있습니다.

import numpy as np

## Let us create an array
a = np.array([5, 4, 6, 8, 9])

#Let us create the copy of input array
c = a.copy()

#Now let us check the id of a and c
print("The id of input array a:")
print(id(a))
print("The id of c is:")
print(id(c))

#Now changing the original array
a[0] = 25

## printing both input array and copy
print("The original array:")
print(a)
print("The copy is:")
print(c)

Numpy View (뷰) 또는 Shallow Copy (얕은 복사)

배열의 뷰를 생성할 때, 이를 얕은 복사라고도 합니다. 뷰는 원본 배열을 가리키기만 하며 데이터를 소유하지 않습니다. 이는 뷰에 가해진 변경 사항이 원본 배열에 영향을 미치고, 그 반대도 마찬가지임을 의미합니다.

입력 배열의 뷰를 생성하려면 numpy.ndarray.view() 함수를 사용할 수 있습니다.

import numpy as np

## given input array
ar = np.array([2, 4, 6, 8, 10, 12])

## creating the view
v = ar.view()

## Now both arr and v will have different id
print("The id of ar")
print(id(ar))
print("The id of v")
print(id(v))

## changing the original array will also effect view
ar[3] = 16

## printing both array and view
print("The original array:")
print(ar)
print("The view:")
print(v)

요약

이 튜토리얼에서는 NumPy 라이브러리에서 ndarray 의 복사 (copy) 및 뷰 (view) 개념에 대해 배웠습니다. copy()view() 함수를 사용하여 기존 배열의 새 복사본을 만들거나 배열에 대한 새 뷰를 만드는 방법을 배웠습니다. 또한 복사본과 뷰의 차이점과 그들이 어떻게 다르게 동작하는지 배웠습니다. 이러한 개념을 추가 예제와 함께 연습해 보시는 것을 권장합니다.