NumPy 배열 복사본 대 비뷰

복사본과 뷰 간의 차이

복사본과 배열 뷰 간의 주요 차이는 복사본이 새로운 배열인 반면에 뷰는 원본 배열의 뷰라는 것입니다.

복사본은 데이터를 가지고 있으며, 복사본에 대한 어떤 변경도 원본 배열에 영향을 미치지 않으며, 원본 배열에 대한 어떤 변경도 복사본에 영향을 미치지 않습니다.

뷰는 데이터를 가지지 않으며, 뷰에 대한 모든 변경은 원본 배열에 영향을 미칩니다. 원본 배열에 대한 모든 변경은 뷰에 영향을 미칩니다.

복사본:

예제

복사본을 생성하고, 원본 배열을 변경한 후 두 개의 배열을 표시합니다:

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 61
print(arr) 
print(x)

실행 예제

이 복사본은 원본 배열에 대한 변경에 영향을 받지 않아야 합니다.

뷰:

예제

뷰를 생성하고, 원본 배열을 변경한 후 두 개의 배열을 표시합니다:

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
arr[0] = 61
print(arr) 
print(x)

실행 예제

뷰는 원본 배열에 대한 변경에 영향을 받아야 합니다.

뷰에서 변경:

예제

뷰를 생성하고, 뷰를 변경하고, 두 개의 배열을 표시합니다:

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

실행 예제

원본 배열은 뷰에 대한 변경에 영향을 받아야 합니다.

배열이 데이터를 가지고 있는지 확인

위와 같이 복사본은 데이터를 가지고 있으며, 뷰는 데이터를 가지지 않지만, 우리는 어떻게 확인할 수 있습니까?

NumPy 배열은 모두 속성을 가집니다 base، 그렇다면 이 배열이 데이터를 가지고 있다면 이 base 속성은 다음을 반환합니다: None

그렇지 않으면base 속성은 원본 객체를 참조합니다.

예제

배열이 자신의 데이터를 가지고 있는지 확인하기 위해 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

리스트를 원래 배열로 반환