[파이썬][numpy] numpy에서 팬시 인덱싱

Numpy는 파이썬에서 다차원 배열을 다루는 데 사용되는 강력한 라이브러리입니다. 이러한 배열에서 명확하고 효율적인 원소 또는 원소 집합을 선택하려면 팬시 인덱싱(fancy indexing) 기능을 사용할 수 있습니다.

팬시 인덱싱은 배열의 특정 위치나 조건에 따라 원소를 선택하는 방법입니다. 이는 배열의 각 차원에 대해 인덱스를 배열로 지정해서 작동합니다.

1. 기본 사용법

팬시 인덱싱은 [] 기호를 사용하여 구현됩니다. 선택하려는 행/열의 인덱스를 배열로 넣으면 해당 위치에 있는 요소가 선택됩니다. 예를 들어, 다음과 같이 2차원 배열에서 팬시 인덱싱을 사용할 수 있습니다.

import numpy as np

# 2차원 배열 생성
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 행 인덱스 팬시 인덱싱 - 첫 번째 및 세 번째 행 선택
rows = np.array([0, 2])
selected_rows = array[rows]
print(selected_rows)

결과:

[[1 2 3]
 [7 8 9]]

2. 조건에 따른 팬시 인덱싱

팬시 인덱싱은 배열의 조건에 따라 원소를 선택할 수도 있습니다. 이를 위해 조건을 만족하는 원소의 인덱스를 추출하고, 이를 팬시 인덱싱에 사용합니다. 예를 들어, 다음과 같이 양수인 원소만 선택하는 팬시 인덱싱을 사용할 수 있습니다.

import numpy as np

# 1차원 배열 생성
array = np.array([1, -2, 3, -4, 5])

# 양수인 원소의 인덱스 추출
indices = np.where(array > 0)

# 팬시 인덱싱에 사용하여 양수인 원소 선택
selected_elements = array[indices]
print(selected_elements)

결과:

[1 3 5]

3. 다차원 배열의 팬시 인덱싱

Numpy를 사용하면 다차원 배열에서도 팬시 인덱싱을 적용할 수 있습니다. 이를 위해 각 차원별로 인덱스 배열을 사용합니다. 예를 들어, 다음과 같이 2차원 배열에서 팬시 인덱싱을 사용할 수 있습니다.

import numpy as np

# 2차원 배열 생성
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 행과 열 모두에 대한 팬시 인덱싱
rows = np.array([0, 2])
cols = np.array([1, 2])
selected_elements = array[rows, cols]
print(selected_elements)

결과:

[2 9]

결론

Numpy의 팬시 인덱싱은 다차원 배열에서 원소를 선택하는 강력한 기능입니다. 위에서 언급한 기본 사용법과 조건에 따른 팬시 인덱싱을 익히면 데이터 관리 및 처리에 도움을 줄 수 있습니다. 이를 통해 원하는 데이터를 효율적으로 추출하고 다양한 연산을 수행할 수 있습니다.