개요
- 어떤 값을 의도적으로 덮어쓰고 싶을 때는 상관이 없지만, 덮어쓰고 싶지 않을 때 덮어쓰는 실수를 할 수도 있다.
- == view라는 개념을 잘 이해하지 못하면 우리가 가지고 있는 값을 덮어쓰는 실수를 저지를 수 있다.
- => view의 개념을 잘 이해함으로써 불필요한 copy를 피할 수 있고, 메모리 자원을 아끼는 데에 큰 도움이 된다.
import numpy as np
ary = np.array([[1,2,3], [4,5,6]])
first_row = ary[0]
first_row += 1
print(first_row)
print(ary[0])
출력값을 보면, 분명 first_row에 ary[0]를 복사에서 더해줬는데, ary[0]에도 똑같이 연산이 수행되었음을 알 수 있다. ary[0]를 first_row에 copy하면서 둘은 서로 link된다는 사실을 기억하자.
- original value에도 영향을 미친다는 개념이 바로 view.
- original value 와 copied value 사이에 link가 존재
- 이를 피하기 위해서는 numpy에서 copy라는 method를 사용하자.
import numpy as np
ary = np.array([[1,2,3], [4,5,6]])
first_row = ary[0].copy()
first_row += 1
print(first_row)
print(ary[0])
Fancy Indexing
- Numpy의 fancy indexing에서는 view가 아니라 copy 값을 반환한다.
- 일반적인 python list는 인덱싱을 할 때 튜플 값을 사용할 수 없지만, numpy의 fancy indexing은 가능하다.
import numpy as np
ary = np.array([[1,2,3], [4,5,6]])
first_row = ary[:,[1,2]] # Fancy Indexing
first_row += 1
print(first_row)
print(ary[:,[1,2]])
- Boolean Masking 은 Fancy indexing
'Computer Science > 키워드 스터디' 카테고리의 다른 글
[EOF, End Of File] 파일 종료 (0) | 2024.02.16 |
---|---|
[에라토스테네스의 체] 소수를 구하는 알고리즘 (1) | 2024.02.11 |
댓글