[Numpy] 인덱싱과 슬라이싱을 이용한 배열의 원소 조회

밍키·2020년 8월 5일
0

파이 파이 넘파이

목록 보기
4/6

1. 배열 인덱싱(Indexing)

1.1 index

  • 배열내의 원소의 식별번호
  • 0부터 시작

1.2 indexing

  • index를 이용해 원소 조회
  • [] 표기법 사용

1.3 구문

  • ndarray[index]
  • 양수는 지정한 index의 값을 조회한다.
  • 음수는 뒤부터 조회한다.
    • 마지막 index가 -1
  • 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[:3, :]
    • , 로 행과 열을 구분한 다중 슬라이싱 사용
  • 다차원의 경우
    • 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를 반환
profile
대한민국 4차 산업의 역군을 꿈꾸며.

0개의 댓글