SJ_Koding

Numpy 인덱싱(정수 인덱싱, 조건 인덱싱, 팬시 인덱싱) 본문

Data analysis/Numpy

Numpy 인덱싱(정수 인덱싱, 조건 인덱싱, 팬시 인덱싱)

성지코딩 2022. 1. 2. 14:25

안녕하세요, 성지코딩입니다!

이번 게시글은 Numpy 인덱싱에 대해 알아봅니다. Index는 행렬, 배열, 리스트 등에서 특정 요소를 빠르게 참조할 수 있습니다.

 

Numpy Array Indexing


  • 리스트 혹은 다른 언어에서의 배열같은 경우 일반적으로 정수 값을 사용하고 정수는 특정 요소의 위치(순서)를 의미합니다.
  • 파이썬에서 시퀀스 자료형에서 사용한 것과 동일하게 대괄호([])를 사용하여 특정 요소에 접근이 가능합니다.
  • 기존 파이썬의 시퀀스 자료형에는 차원에 따라 대괄호를 여러번 사용 했지만 Numpy 에서 대괄호는 한 번만 사용됩니다. 단 차원의 구분자로 ,를 사용합니다.
    예) 2차원 리스트에서 데이터 접근: list[0][1]
    예) 2차원 Numpy Array에서 데이터 접근 : array[0, 1]
  • Numpy의 경우 정수 인덱싱, 조건 인덱싱, 팬시(Fancy) 인덱싱을 지원합니다.

정수 인덱싱


접근하고자 하는 요소의 위치(인덱스)를 이용하여 데이터에 접근합니다.

인덱스의 시작은 0이며 마지막의 경우 -1로 접근이 가능합니다. ( [행 인덱스, 열 인덱스, ···] )

import numpy as np

array = np.arange(9).reshape(3, 3)
print('array:', array)
print('array[0]:', array[0])
print('array[-1]:', array[-1])
print('array[0, 0]:', array[0, 0])
print('array[-1, -1]:', array[-1, -1])

 

 

array: [[0 1 2]
 [3 4 5]
 [6 7 8]]

array[0]: [0 1 2]

array[-1]: [6, 7, 8]

array[0, 0]: 0

array[-1, -1]: 8

 

⬇ np.arange에 대하여 알아보기

https://sjkoding.tistory.com/2

 

01. Numpy의 개요와 생성

안녕하세요! 성지코딩입니다. 블로그 개시 후 첫 글입니다. 이 글이 성지가 될 수 있을지는 3년뒤에 확인해보겠습니다. :) 제 글들은 누군가의 강의에 주 목적을 둔다긴 보다는 설명하는 어투로

sjkoding.tistory.com

⬇ reshape에 대해 알아보기

https://sjkoding.tistory.com/4

 

03. Numpy 배열 형태 변경(reshape)과 데이터 유형 변경 (dtype, astype)

안녕하세요! 성지코딩입니다. 이번 게시글은 Numpy의 배열 형태 변경과 데이터 유형 변경에 대해 알아봅니다. Numpy 배열 형태 변경 Numpy Array의 가장 큰 장점은 형태(shape)를 자유자재로 변경이 가

sjkoding.tistory.com

조건 인덱싱 (Boolean Indexing)


  • Boolean Array를 이용하여 인덱싱 하는 방법입니다.
  • Boolean Array의 값이 True값을 가지는 위치를 value Array에서 선택합니다.
    - Boolean Array가 Mask 처럼 동작합니다.
  • 조건 인덱싱의 결과는 항상 1차원 Array가 옵니다.

원소의 값이 짝수인 것만 조건 인덱싱을 통해 가져오는 경우

배열에 조건 비교를 하는 경우 BroadCast(Element Wise) 연산으로 인해 각 요소별 비교 결과(True, False)값을 가지게 됩니다.

https://sjkoding.tistory.com/5

 

04. Numpy의 연산, Broadcast(Element Wise)

안녕하세요, 성지코딩입니다! 이번 게시글은 Numpy의 연산에 대해 알아봅니다. 여기서 Broadcast의 개념은 Pandas에서도 이어지니 꼭 알아두셔야합니다. 어쩌면 Numpy의 꽃이라고 볼 수 있겠네요. Numpy A

sjkoding.tistory.com

위의 그림을 코드화 시켜보겠습니다.

array = np.arange(1, 10).reshape(3, 3)
bidx = array % 2 == 0
bidx

array([[False,  True, False],
       [ True, False,  True],
       [False,  True, False]])

array[bidx]

array([2, 4, 6, 8])

* Boolean Array를 array의 인덱스로 넣어주면 (조건 인덱스를 넣어주면) 그 조건이 True인 원소들의 위치를 반환합니다

array[array > 5]

array([6, 7, 8, 9])

 

 

조건 인덱싱의 경우 추후 다뤄볼  pandas의 DataFrame에서 컬럼과 행을 추출하는데 있어 필수적으로 사용됩니다. 반드시 알아두셔야 하는 개념입니다! 조건 인덱싱 개념이 다시 나오게 된다면 더욱 자세하게 설명하겠습니다!

 

다음 게시글은 Numpy Slicing에 대해 다룹니다. 감사합니다.

-sjkoding-