본문 바로가기
파이썬/파이썬기본문법

파이썬 Numpy 배열 복사 vs 보기(Copy vs View)

by flycoding 2023. 12. 8.
반응형

파이썬 numpy 배열 복사와 보기의 차이점

배열의 복사본과 보기의 주된 차이점은 복사본이 새 배열이고 보기는 원래 배열의 보기에 불과하다는 것이다.

복사본은 데이터를 소유하며 복사본에 대한 변경 사항은 원본 배열에 영향을 주지 않으며 원본 배열에 대한 변경 사항은 복사본에 영향을 주지 않는다.

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

 

복사(COPY):

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

import numpy as np

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

x = arr.copy()
print("x = arr.copy() : ", x)

arr[0] = 42

print('arr : ', arr)
print('x : ', x)

arr.copy()를 통해 복사본이 x 변수에 저장된다. copy()함수를 실행한 후에는 arr과 x는 값은 값을 가지고 있다.

그러나, arr[0] = 42를 실행하게 되면 arr[0]에는 42값으로 변경되지만 x[0]에는 1이라는 값을 그대로 유지한다.

위의 코드를 실행하면 아래 그림과 같다.

파이썬 복사 copy() 활용 예제

 

 

VIEW:

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

import numpy as np

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

x = arr.view()
print("x = arr.view() : ", x)

arr[0] = 42

print('arr : ', arr)
print('x : ', x)

arr.view()를 통해 arr을 참조하는 x 변수가 생성된다. view()함수를 실행한 후에는 arr과 x는 값은 값을 참조한다.

그리고, arr[0] = 42를 실행하게 되면 arr[0]에는 42값으로 변경되며 x[0]은 arr과 같은 값을 참조하기 때무네 x[0]은 42로 동일하게 변경이 된다.

위의 코드를 실행하면 아래 그림과 같다.

파이썬 보기 view() 활용 예제

 

 

View에서 값을 변경하기

보기를 만들고, 보기를 변경하고, 두 배열을 모두 표시한다:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
print("arr : \n", arr)

x = arr.view()
print("x = arr.view() \n")
x[0] = 31
print("x[0] = 31 \n")

print("arr : \n", arr)
print("x : \n", x)

 

위의 코드를 실행하면 아래 그림과 같다.

파이썬 numpy view에서 값 변경 활용 예제

 

 

파이썬 배열에 자체 데이터를 가지고 있는지 점검 - base

위에 언급한 것처럼 복사본은 데이터를 소유하고 뷰는 데이터를 소유하지 않지만 이를 어떻게 확인할 수 있을까?
모든 NumPy 배열은 배열이 데이터를 소유할 경우 None을 반환하는 base 속성을 가집니다.
그렇지 않으면 기본 속성이 원래 개체를 나타낸다.

base 속성 값을 인쇄하여 배열이 데이터를 소유하고 있는지 여부를 확인한다:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
print("arr : \n", arr)

x = arr.copy()
y = arr.view()
print("x=arr.copy() : \n", x)
print("y=arr.copy() : \n", y)

print('x.base : ', x.base)
print('y.base : ', y.base)

위의 코드를 실행하면 아래 그림과 같다.

파이썬 numpy copy() view() base 속성 활용 예제

 

지금까지 파이썬 numpy 배열의 복사와 보기(copy vs view)에 대해서 살펴보았다.

파이썬 numpy 배열의 copy()와 view() 함수의 차이점 그리고 속성값 base 에 대해서 살펴보았다.

꼭 손으로 눈으로 머리로 익히며 실습하기를 바란다.

모두 화이팅입니다.!!!

 

출처 : 이 글의 출처는 w3schools사이트를 참고하였으며 필자가 추가하여 정리한 글입니다.

반응형

댓글