# NumPy Boolean Masking: `x[x < 5]`는 인덱스를 가져오는 걸까?

Yeeun·2025년 4월 28일

Python

목록 보기
19/31

최근 NumPy로 데이터를 다루면서, x[x < 5] 같은 문법을 만났습니다.
처음에는 "왜 True인 인덱스를 가져오는 걸까?" 하고 생각했는데, 공부하면서 정확한 동작을 알게 되어 기록해둡니다.


문제 상황

예를 들어 이런 코드가 있습니다.

import numpy as np

x = np.array([[2, 6, 3, 8],
              [1, 9, 4, 5],
              [7, 0, 2, 3]])

result = x[x < 5]
print(result)

처음 생각한 착각:

  • x < 5를 하면 True/False로 이루어진 마스크가 생긴다.
  • x[mask]를 하면 True인덱스를 가져오는 거다!

하지만 실제 동작은 조금 다릅니다.


진짜 동작 설명

  1. x < 5를 하면, x와 똑같은 모양(shape)의 Boolean 배열이 만들어집니다.
# x < 5 결과:
[[ True False  True False]
 [ True False  True False]
 [False  True  True  True]]
  1. x[mask]를 하면, 이 True에 해당하는 값(value) 들만 모아서 1차원(flatten) 으로 반환합니다.
# 실제 result 값
array([2, 3, 1, 4, 0, 2, 3])

즉, 인덱스를 가져오는 게 아니라 값 자체를 가져오는 것입니다!


인덱스를 가져오고 싶다면?

만약 "어디가 True인지 위치(인덱스)를 알고 싶다"면 np.where()를 써야 합니다.

np.where(x < 5)

결과:

(array([0, 0, 1, 1, 2, 2, 2]), array([0, 2, 0, 2, 1, 2, 3]))

첫 번째 array는 행(row) 인덱스, 두 번째 array는 열(column) 인덱스입니다.


간단 정리

코드의미
x[x < 5]조건을 만족하는 들을 가져온다 (1D 배열)
np.where(x < 5)조건을 만족하는 인덱스를 가져온다 (tuple of arrays)

마무리

  • x[x < 5]는 "인덱스"를 가져오는 게 아니라 "값"을 가져온다.
  • "인덱스"를 알고 싶으면 np.where()를 써야 한다.
  • Boolean Masking은 값을 뽑을 때 아주 편리하다.

처음에는 헷갈릴 수 있는데, 한 번 정확히 이해하면 NumPy를 훨씬 자유롭게 쓸 수 있게 됩니다!

0개의 댓글