머신러닝/넘파이

[Numpy] ndarray 인덱싱(Indexing) 종류와 사용방법(2) - 팬시 인덱싱

shoney9254 2021. 8. 23. 20:33
반응형

ndarray의 데이터 인덱싱의 종류를 알아보고 종류별 사용 방법에 대해서 알아보자.

 

1. 특정 위치의 단일값 추출 - [링크 클릭]

2. 슬라이싱 - [링크 클릭]

3. 팬시 인덱싱 

4. Boolean 인덱싱 - [링크 클릭]

 

이전에는 1.단일값 추출, 2.슬라이싱을 공부했다면, 이번에는 3. 팬시 인덱싱 을 알아보도록 하자.

 

3. 팬시 인덱싱 

팬시 인덱싱은 리스트나 ndarray로 인덱스 집합을 지정하면 해당 위치의 인덱스에 해당하는 ndarray를 반환합니다. 

아래 예제를 살펴봅시다.

 

먼저, shape가 3,3인 ndarray를 생성합니다. 

소스 코드

import numpy as np

 

array1d = np.arange(start=1, stop=10)

array2d = array1d.reshape(3, 3)

print(array2d)

결과

[[1 2 3]
 [4 5 6]
 [7 8 9]]

 

1) [ ] : 대괄호 사용

기존에 사용하던 단일값 추출에서 대괄호를 통해서 ndarray를 반환하도록 할 수 있습니다. 

반환한 값을 보면, 단일 값이 나온것이 아닙니다. 그냥 8이 아니라 [8]을 출력하는 것을 확인할 수 있습니다.

결론적으로, 8이 들어가 있는 ndarray를 출력합니다. 

소스 코드

print('array2d[2, 1]]:\n', array2d[2, 1])  # 단일값 추출이다. 일반적으로 단일 값 불러올때 사용방법

print('array2d[[2], 1]:\n', array2d[[2], 1]) # [] 대괄호를 넣어서 사용 가능하다. 반환값이 ndarray가 된다.

결과

array2d[2, 1]]:
 8
array2d[[2], 1]:
 [8]

 

2) [ , ] : 대괄호 안에 , 사용

[0,2] 라고 입력하면, 0인덱스와 2인덱스만 출력합니다. 0에서 2까지인 범위지정이 아닙니다.

물론 : 슬라이싱이 사용가능하고, 콤마(,) 생략 가능합니다. 

소스 코드

print('array2d[[2], :]:\n', array2d[[2], :])  # 인덱스가 2인 행을 모두 출력한다.

print('array2d[[0, 2], :]:\n', array2d[[0, 2], :])  # 인덱스가 0과 2인 행을 모두 출력한다.

print('array2d[[0, 2]]:\n', array2d[[0, 2]])  # 위와 같은 결과

결과

array2d[[2], :]:
 [[7 8 9]]
array2d[[0, 2], :]:
 [[1 2 3]
 [7 8 9]]
array2d[[0, 2]]:
 [[1 2 3]
 [7 8 9]]

 

3) [ , ] , [ , ] 

이렇게 사용하면 (0,0)과 (1,1) 의 값이 들어가있는 ndarray를 반환하게 됩니다. 

소스 코드

print('array2d[[0,1],[0,1]]:\n', array2d[[0, 1], [0, 1]]) # 이런 경우 (0,0), (1,1) 가 출력된다.

결과

array2d[[0,1],[0,1]]:
 [1 5]

 

 

반응형