Python/Numpy

[Python] 파이썬 numpy 불 인덱싱 (boolean indexing) 불 대수 배열 인덱싱

나비🦋 2024. 5. 15. 19:59
반응형



안녕하세요! 나비입니다 🦋

이번에는 파이썬 numpy를 이용해서 배열을 인덱싱하는 방법 중, 특별히 bool 대수를 활용한 ‘boolean indexing’을 소개하려고 합니다.

boolean indexing은 주어진 배열에서 원하는 조건을 만족시키는 원소만 선택하는 방법입니다. 일반 indexing의 경우 원소의 실제 위치를 직접 지정해야 했던 것과 다르게, boolean indexing은 특정한 조건을 제시하면 그 조건에 해당하는 원소 또는 배열을 자동으로 출력해줍니다.

예제 코드를 통해 더 구체적으로 설명해 보겠습니다.

import numpy as np

A = np.array([1,2,3,4])
print(A)

A_bool2 = (A%2 == 0)
print(A_bool2)

A_bool3 = (A%3 == 0)
print(A_bool3)
[1,2,3,4]
[False, True, False, True]
[False, False, True, False]


A_bool2 = (A%2 == 0) 이라는 구문은 배열 A의 요소들을 각각 2로 나누었을 때의 나머지가 0인 요소, 즉 짝수가 있는 위치에는 True, 아닌 곳에는 False 값을 가지는 배열을 의미합니다.

마찬가지 원리로, A_bool3는 3의 배수가 있던 위치에만 True 값이 들어가 있는 새로운 배열입니다.



이 새로운 bool 배열을 이용해서 다차원 행렬은 인덱싱할 수 있습니다. 아래 예시를 참고해주세요! (위의 예제와 이어지는 코드입니다)

sample = np.array([1,2,3], [4,5,6], [7,8,9], [10,11,12])

sample_2 = sample[A_bool2]
sample_3 = sample[A_bool2,:3]
sample_4 = sample[A_bool3]
sample_5 = sample[A_bool2 or A_bool3]

print(sample_2)
print(sample_3)
print(sample_4)
print(sample_5)
[[4,5,6], [10,11,12]]
[[4,5,6]]
[[7,8,9]]
[[4,5,6], [7,8,9], [10,11,12]]


sample_2는 A_bool2 배열에서 True에 해당하는 행만 불러오도록 했습니다. A_bool2는 [F, T, F ,T]이기 때문에 2번째, 4번째 열인 [4,5,6]과 [10,11,12]가 선택되었습니다.

sample_3는 다른 조건이 함께 들어간 경우입니다. 이에 따라 [10,11,12]를 제외하고 [4,5,6]만 출력됩니다.

sample_4는 A_bool3로 인덱싱한 결과입니다. 원리는 sample_2와 동일합니다.

sample_5처럼 bool 조건을 여러 개 중첩하여 사용할 수도 있습니다. And와 or 사용 가능합니다.



반응형