NumPy 배열 복사 대 보기


복사와 보기의 차이점

복사본과 배열 보기의 주요 차이점은 복사본이 새 배열이고 보기가 원래 배열의 보기라는 것입니다.

복사본 은 데이터를 소유하고 복사본 에 대한 변경 사항은 원본 어레이에 영향을 미치지 않으며 원본 어레이에 대한 변경 사항은 복사본에 영향을 미치지 않습니다.

뷰 는 데이터를 소유하지 않으며 뷰 에 대한 변경 사항은 원래 배열에 영향을 미치고 원래 배열에 대한 변경 사항은 뷰에 영향을 미칩니다.


복사:

예시

복사본을 만들고 원래 배열을 변경한 다음 두 배열을 모두 표시합니다.

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 42

print(arr)
print(x)

복사본은 원본 어레이의 변경 사항에 영향을 받지 않아야 합니다(SHOULD NOT).


보다:

예시

보기를 만들고 원래 배열을 변경한 다음 두 배열을 모두 표시합니다.

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
arr[0] = 42

print(arr)
print(x)

뷰는 원래 배열에 대한 변경 사항의 영향을 받아야 합니다(SHOULD).

보기에서 변경:

예시

보기를 만들고 보기를 변경하고 두 배열을 모두 표시합니다.

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
x[0] = 31

print(arr)
print(x)

원래 배열은 뷰에 대한 변경 사항의 영향을 받아야 합니다(SHOULD).



배열이 데이터를 소유하는지 확인

위에서 언급했듯이 사본 은 데이터를 소유 하고 뷰 는 데이터를 소유 하지 않습니다 . 하지만 이를 어떻게 확인할 수 있습니까?

모든 NumPy 배열에는 배열 이 데이터를 소유하면 base반환 하는 속성 이 있습니다.None

그렇지 않으면 base  속성이 원래 개체를 참조합니다.

예시

배열이 데이터를 소유하는지 여부를 확인하기 위해 기본 속성의 값을 인쇄하십시오:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

x = arr.copy()
y = arr.view()

print(x.base)
print(y.base)

복사본이 반환 None됩니다.
보기는 원래 배열을 반환합니다.


연습으로 자신을 테스트하십시오

연습:

올바른 방법을 사용하여 어레이의 복사본을 만드십시오.

arr = np.array([1, 2, 3, 4, 5])

x = arr.