Home [Numpy] 02. Numpy 활용
Post
Cancel

[Numpy] 02. Numpy 활용

배열 인덱싱(Indexing)

  • index
    • 원소의 배열 내 식별 번호
    • 0부터 시작
  • indexing
    • index를 이용해 원소 조회
  • 구문
    • ndarray[index]
    • 양수는 index값으로, 음수는 뒤부터 조회 ([-1] == 마지막 index)

    • N차원 배열
      • arr[0축 index, 1축 index, 2축 index ... n축 index]
      • 파이썬 리스트와 차이점
        • 리스트의 경우
        • py_list[0축 index][1축 index][2축 index]...[n축 index]
  • fancy indexing(팬시 인덱싱)
    • 여러개의 원소를 한번에 조회할 경우 리스트에 담아 전달
    • 다차원 배열의 경우 각 축별로 list로 지정
    • arr[[1,2,3,4,5]]
      • 1차원 배열(vector): 1,2,3,4,5 번 index의 원소들 한번에 조회
    • arr[[0,3], [1,4]]
      • [0,3] - 0번축 index list, [1,4] - 1번축 index list 2차원 배열(matrix): [0,1], [3,4] 의 원소들 조회
  • 코드 예시
    1
    2
    
      a = np.arange(30).reshape(5, 6)
      print(a[[0, 3], [1, 4]])
    
    1
    
      [ 1 22]
    
    • 좌표 형식이라고 생각하면 편함
      • 2차원의 경우 앞 리스트는 가로, 뒤 리스트는 세로에서의 값의 위
    • 위 코드의 경우는 a[0, 1]a[3, 4]를 한번에 조회하는 방식이다.

Slicing (슬라이싱)

  • 배열의 원소들을 범위로 조회한다.
  • ndarry[start : stop : step ]
    • start : 시작 인덱스. 기본값 0
    • stop : 끝 index. stop은 포함하지 않는다. 기본값 마지막 index
    • step : 증감 간격. 기본값 1

      다차원 배열 슬라이싱

  • 각 축에 slicing 문법 적용
  • 2차원의 경우
    • arr [0축 slicing, 1축 slicing]
      • arr[:3, :]
    • , 로 축을 구분한 다중 슬라이싱 사용
  • 다차원의 경우
    • arr[0축 slicing, 1축 slicing, ..., n축 slicing]
  • slicing과 indexing 문법은 같이 쓸 수 있다.

슬라이싱은 원본에 대한 View

  • slicing한 결과는 새로운 배열을 생성하는 것이 아니라 기존 배열을 참조한다.
  • slicing한 배열의 원소를 변경하면 원본 배열의 것도 바뀐다.
  • 배열.copy()
    • 배열을 복사한 새로운 배열 생성
    • 복사후 처리하면 원본이 바뀌지 않는다.

boolean indexing

  • Index 연산자에 같은 형태(shape)의 Boolean 배열을 넣으면 True인 index의 값만 조회 (False가 있는 index는 조회하지 않는다.)
  • ndarray내의 원소 중에서 원하는 조건의 값들만 조회할 때 사용
    • ndarray는 element-wise 연산을 지원한다. 이를 이용해 boolean indexing으로 원하는 조건의 값들을 조회할 수 있다.
  • boolean indexing을 masking이라고도 한다.
  • 2차원 이상인 경우에도 가능하다

넘파이 비교 연산자

  • 파이썬의 and, or, not은 사용할 수 없다.
  • &: and연산
  • |: or 연산
  • ~: not 연산
  • 피연산자는 ( )로 묶어야 한다.
  • Boolean indexing의 경우에는 들어간 array 의 형태와 똑같이 나오지만 비교 연산을 하고 난 이후에는 shape를 유지를 못하기 때문에 1차원 형식으로 돌려준다.
This post is licensed under CC BY 4.0 by the author.