[Numpy] 인덱싱과 슬라이싱을 이용한 배열의 원소 조회
1. 배열 인덱싱(Indexing)
1.1 index
1.2 indexing
- index를 이용해 원소 조회
- [] 표기법 사용
1.3 구문
- ndarray[index]
- 양수는 지정한 index의 값을 조회한다.
- 음수는 뒤부터 조회한다.
- 2차원배열의 경우
- arr[행index, 열index]
- 파이썬 리스트와 차이점 (list[행][열])
- N차원 배열의 경우
- arr[0축 index, 1축 index, ..., n축 index]
1.4 팬시(fancy) 인덱싱⭐
- 여러개의 원소를 한번에 조회할 경우 리스트에 담아 전달한다.
- 다차원 배열의 경우 각 축별로 list로 지정
arr[[1,2,3,4,5]]
- 1차원 배열(vector): 1,2,3,4,5 번 index의 원소들 한번에 조회
arr[[0,3],[ 1,4]]
- [0,3] - 1번축 index list, [1,4] - 2번축 index list
- 2차원 배열(matrix): [0,1], [3,4] 의 원소들 조회
2. 슬라이싱
- 배열의 부분 집합을 하위배열로 조회 및 변경하는 방식
- ndarry[start : stop : step ]
- start : 시작 인덱스. 기본값 0
- stop : 끝 index. stop은 포함하지 않는다. 기본값 마지막 index
- step : 증감 간격. 기본값 1)
2.1 다차원 배열 슬라이싱
- 각 축에 slicing 문법 적용
- 2차원의 경우
- arr [행 slicing, 열 slicing]
,
로 행과 열을 구분한 다중 슬라이싱 사용
- 다차원의 경우
- arr[0축 slicing, 1축 slicing, ..., n축 slicing]
- slicing과 indexing 문법은 같이 쓸 수 있다.
- 모든 축에 index를 지정할 필요는 없다.
2.2 슬라이싱은 원본에 대한 View
- slicing한 결과는 새로운 배열을 생성하는 것이 아니라 기존 배열을 참조한다.
- slicing한 배열의 원소를 변경하면 원본 배열의 것도 바뀐다.
- 결론은 값 바꿀 때 조심해야한다.
- 배열.copy()
- 배열을 복사한 새로운 배열 생성
- 복사후 처리하면 원본이 바뀌지 않는다.
3. boolean indexing
- Index 연산자에 Boolean 배열을 넣으면 True인 index의 값만 조회 (False가 있는 index는 조회하지 않는다.)
- ndarray내의 원소 중에서 원하는 조건의 값들만 조회할 때 사용
3.1 np.where()⭐
- np.where(boolean 배열) - True인 index를 반환
- boolean연산과 같이쓰면 특정 조건을 만족하는 원소의 index조회됨.
- np.where(booean 배열, True를 대체할 값, False를 대체할 값)
- True와 False를 다른 값으로 변경한다.
3.2 기타
- np.any(boolean 배열)
- 배열에 True가 하나라도 있으면 True 반환
- np.all(boolean 배열)
- 배열의 모든 원소가 True이면 True 반환
3.3 정렬
- np.sort(arr): arr을 정렬
- np.argsort(arr): 정렬 후 index를 반환