반응형
파이썬의 리스트의 경우 다른 객체에 할당받은 후 그 객체를 변경해도 변경되지 않지만, 넘파이 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 |
---|