NumPy View와 Copy

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.


View 와 Copy

  • View: 원본 배열의 메모리를 공유하는 새로운 배열로 뷰를 수정하면 원본도 함께 변경된다.
  • Copy: 원본 배열과 완전히 독립된 새로운 배열로 복사본을 수정해도 원본은 변경되지 않는다.
# view 경우 > 일반적으로 copy를 해주지 않으면 모든 기본 복사는 다 view 복사다.
origin = np.arange(5)  # [0,1,2,3,4]
view_arr = origin  # [0,1,2,3,4]

view_arr[0] = 99  # [99,1,2,3,4]
origin  # [99,1,2,3,4]

# copy 경우 
origin = np.arange(5)  # [0,1,2,3,4]
view_arr = origin.copy()  # [0,1,2,3,4]

view_arr[0] = 99  # [99,1,2,3,4]
origin  # [0,1,2,3,4]

np.array vs np.asarray ?

그럼 우리가 Numpy를 통해 배열을 만들때 사용한 np.array는 어떤 개념일까?

  • np.arraay(): 항상 새로운 배열을 복사하여 만든다
  • np.asarray(): 이미 numpy 배열이라면 복사하지 않고 그대로 사용해 메모리 효율을 높인다.

즉, 둘은 동일한 기능을 하는 함수임은 맞지만

np.array는 copy=True가 기본값이고, asarray는 copy=False가 기본값인 것이다.

a = np.ones([2,3])
a_array = np.array(a)
a_asarray = np.asarray(a)

a[0] = 0

a_array
# array([[1., 1., 1.],
#        [1., 1., 1.]])

a_asarray
# array([[0., 0., 0.],
#        [1., 1., 1.]])