-
파이썬 데이터사이언스 핸드북 2 장 - 팬시 인덱싱데이터 분석/NumPy 2020. 5. 31. 14:34
배열의 일부에 접근하고 수정하는 법 중 팬시 인덱싱에 대해 포스팅한다.
- 간단 인덱스 arr[0]
- 슬라이싱 arr[:5]
- 부울 마스크 arr[arr>0]
- 팬시 인덱싱 arr[[3,7,2]]
팬시 인덱싱
팬시 인덱싱은 단순 인덱싱과 비슷하지만, 단일 스칼라 대신 인덱스 배열을 전달한다. 이로써 복잡한 배열 값의 하위 집합에 매우 빠르게 접근해 그것을 수정할 수 있다. 한 번에 여러 배열 요소에 접근하기 위해 인덱스의 배열을 전달한다. (...) 팬시 인덱싱을 이용하면 결과의 형상이 인덱싱 대상 배열의 형상이 아니라, 인덱스 배열의 형상을 반영한다.
표준 인덱싱을 사용할 때와 마찬가지로 첫 번째 인덱스는 행을 말하며, 두 번째 인덱스는 열을 말한다.
팬시 인덱싱에서 인덱스 쌍을 만드는 것도 브로드캐스팅 규칙을 따른다.
결합 인덱싱
인덱싱 방식을 각 행과 열에 다르게 적용할 수 있다.
단순인덱스와 팬시 인덱스의 결합
슬라이싱과 팬시 인덱스의 결합
팬시 인덱스와 마스크의 결합
팬시 인덱싱으로 값 변경하기
팬시인덱싱으로 값을 변경설정하면 원 배열에 반영됩니다.
155 문단 내 x[i] += 1 은 해당 구문 내에서 최종 값으로 한번만 +1 한 값을 할당한다. 구문 단위로 버퍼링*이 적용되기 때문이다
156 문단 반복 추가와 다르게 동작한다.
157 문단에서 x[i] += 1 을 한번 더 해주면 문장 내에서 최종 값으로 한번 더 +1 한 값을 할당한다.
유니버셜 함수의 at() 메서드** 를 사용하면 156 문단처럼 반복문 실행의 효과를 낼 수 있다. [유니버셜 함수 심화]
* Buffering [출처]
We can think buffer is a middle layer when memory data is written to the hard disk to reduce the number of hard disk writes.
일반적으로는 File I/O 에서 하드디스크 write 를 줄이기 위해 사용되는 중간계층 기법이다.파이썬 구문 실행에서의 버퍼링은 구문 단위로 버퍼링이 적용되어있다고 가정하면 된다. (그래서 여러번 x[i]+=1 이 실행되어도, 1번만 할당된 것이다.)
**NumPy.ufunc.at() [NumPy Docs]
Prameters
a : array_like
The array to perform in place operation on. First operand
indices : array_like or tuple
Array like index object or slice object for indexing into first operand. If first operand has multiple dimensions, indices can be a tuple of array like index objects or slice objects.
b : array_like
Second operand for ufuncs requiring two operands. Operand must be broadcastable over first operand after indexing or slicing. --- 이항연산 ufunc 에만 사용할 수 있다.
Explanation
Performs unbuffered in place operation on operand ‘a’ for elements specified by ‘indices’. For addition ufunc, this method is equivalent to a[indices] += b, except that results are accumulated for elements that are indexed more than once.
- a[[0,0]] += 1 will only increment the first element once because of buffering,
- whereas add.at(a, [0,0], 1) will increment the first element twice.'데이터 분석 > NumPy' 카테고리의 다른 글
파이썬 데이터사이언스 핸드북 2 장 - 구조화된 데이터 (0) 2020.05.31 파이썬 데이터사이언스 핸드북 2 장 - 정렬과 파티셔닝 (1) 2020.05.31 파이썬 데이터사이언스 핸드북 2 장 - 비교연산, 논리연산으로 부울배열을 만들고 마스킹 연산하자. (0) 2020.05.31 파이썬 데이터사이언스 핸드북 2 장 - 비교, 마스크, 부울 로직 (0) 2020.05.31 파이썬 데이터사이언스 핸드북 2 장 - 배열 연산: 브로드캐스팅 (0) 2020.05.31