Python/Numpy

[Python] numpy - view, copy

언킴 2022. 1. 14. 22:02
반응형

파이썬의 리스트의 경우 다른 객체에 할당받은 후 그 객체를 변경해도 변경되지 않지만, 넘파이 array의 경우 view(원본)을 나타내기 때문에 원본이 변경되지 않게 하거나 copy를 해주어야한다. 

li = [x for x in range(10)]

arr_li = li[:]
arr_li[0] = 100

print(li)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(arr_li)
# [100, 1, 2, 3, 4, 5, 6, 7, 8, 9]

리스트의 경우 위와 같이 객체 0번을 받아서 변경을해도 변경이 되지 않는 것을 확인할 수 있다. 복사본의 경우 변경되어 있는 것이 보인다.

 

arr = np.arange(10)

arr_view = arr[:]
arr_view[0] = 100

print(arr_view)
# array([100,   1,   2,   3,   4,   5,   6,   7,   8,   9])

print(arr)
# array([100,   1,   2,   3,   4,   5,   6,   7,   8,   9])

 

하지만 array의 경우 원본, 복사본 모두 변경이 되어 버린다. pandas 를 사용할 때 copy를 하지않고 분석을 진행하다가 오류코드가 뜨는 것을 간혹가다가 볼 수 있다. 이럴때도 이때와 마찬가지고 copy를 해주어서 원본의 손상을 막는 방법으로 분석을 진행해야한다. 

 

arr = np.arange(10)

arr_view = arr[:].copy()
arr_view[0] = 100

print(arr_view)
# array([100,   1,   2,   3,   4,   5,   6,   7,   8,   9])

print(arr)
# array([0,   1,   2,   3,   4,   5,   6,   7,   8,   9])

 

'Python > Numpy' 카테고리의 다른 글

[Python] 왜 넘파이를 사용해 ?  (0) 2022.01.14