불리언 마스킹과 고급 인덱싱
불리언 조건으로 배열을 필터링하고 정수 인덱스 배열을 사용해 임의의 원소를 선택합니다.
불리언 마스킹과 고급 인덱싱은(는) CoddyKit의 무료 Pandas & NumPy Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Pandas & NumPy Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
마스크로 사용하는 불리언 배열
불리언 마스크는 True 또는 False 값으로 이루어진 배열입니다. 이를 인덱스로 사용하면 True로 표시된 요소만 남길 수 있어, 가장 기본적인 필터링 도구로 활용됩니다.
import numpy as np
a = np.array([5, 3, 8, 1, 9, 2, 7])
mask = a > 4
print(mask) # [ True False True False True False True]
print(a[mask]) # [5 8 9 7]복합 불리언 조건
&(and), |(or), ~(not)을 사용해 복합 필터를 만들 수 있습니다. 연산자 우선순위 때문에 문제가 생기지 않도록 각 조건을 항상 괄호로 감싸세요.
import numpy as np
a = np.array([3, 7, 2, 9, 1, 6, 4, 8])
# Elements between 4 and 8 inclusive
result = a[(a >= 4) & (a <= 8)]
print(result) # [7 6 4 8]
# Elements less than 3 or greater than 7
result2 = a[(a < 3) | (a > 7)]
print(result2) # [2 9 1 8]불리언 인덱싱으로 값 수정하기
불리언 선택 결과에 바로 값을 할당하여 일치하는 요소만 제자리에서 변경할 수 있습니다. 이상치를 제한하거나 누락된 값을 채울 때 가장 빠른 방법입니다.
import numpy as np
a = np.array([5, -3, 8, -1, 2, -7])
a[a < 0] = 0 # zero out negatives in-place
print(a) # [5 0 8 0 2 0]
# Cap values above 6
a[a > 6] = 6
print(a) # [5 0 6 0 2 0]2차원 배열에 불리언 마스킹 적용하기
2차원 배열에 불리언 마스크를 적용하면 항상 평탄화된 1차원 결과가 반환됩니다. 전체 행을 선택하려면 한 열에서 1차원 마스크를 만든 뒤 axis 0을 따라 인덱싱하세요.
import numpy as np
m = np.array([[1, 5], [3, 2], [8, 4], [6, 7]])
# Select rows where first column > 4
mask = m[:, 0] > 4
print(mask) # [False False True True]
print(m[mask]) # [[8 4] [6 7]]마스크와 함께 사용하는 np.where
np.where(condition, x, y)는 배열의 형상을 유지합니다. 조건이 참인 위치에서는 x를 선택하고, 나머지 위치에서는 y를 선택합니다. 배열을 평탄화하지 않고 값을 바꿀 때 적합합니다.
import numpy as np
a = np.array([3, -1, 5, -2, 4])
result = np.where(a >= 0, a, 0) # keep positives, replace negatives
print(result) # [3 0 5 0 4]
# Recode: above-average -> 'high', else -> 'low'
labels = np.where(a >= a.mean(), 'high', 'low')
print(labels) # ['high' 'low' 'high' 'low' 'high']고급 인덱싱 기초
고급 인덱싱은 정수 인덱스 배열을 전달해 특정 요소를 가져오는 방식입니다. 원하는 순서로 선택할 수 있고 같은 요소를 여러 번 선택할 수도 있습니다. 결과는 항상 복사본입니다.
import numpy as np
a = np.array([10, 20, 30, 40, 50])
idx = np.array([4, 1, 1, 3])
print(a[idx]) # [50 20 20 40]
# 2D index shape -> 2D output
idx2d = np.array([[0, 2], [4, 1]])
print(a[idx2d]) # [[10 30] [50 20]]2차원 배열의 고급 인덱싱
2차원 배열에서 인덱스 배열을 쌍으로 사용하면 흩어진 위치를 선택할 수 있습니다. m[rows, cols]는 전체 부분 행렬이 아니라 각 (행, 열) 쌍에 해당하는 요소를 가져옵니다.
import numpy as np
m = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# Select elements at (0,2), (1,0), (2,1)
rows = [0, 1, 2]
cols = [2, 0, 1]
print(m[rows, cols]) # [3 4 8]행과 열 격자 선택을 위한 np.ix_
np.ix_는 지정한 행과 열의 모든 조합에 해당하는 부분 행렬을 선택합니다. 행 여러 개와 열 여러 개를 쌍이 아닌 격자 형태로 선택할 때 유용합니다.
import numpy as np
m = np.arange(16).reshape(4, 4)
print(m)
# Select rows 0,2 and columns 1,3
ix = np.ix_([0, 2], [1, 3])
print(m[ix])
# [[ 1 3]
# [ 9 11]]np.nonzero()와 np.argwhere()
np.nonzero는 0이 아닌 요소(또는 True인 요소)의 인덱스를 축별 튜플로 반환합니다. np.argwhere는 같은 정보를 읽기 쉬운 행 형태로 쌓아 반환합니다.
import numpy as np
a = np.array([0, 3, 0, 5, 0, 7])
print(np.nonzero(a)) # (array([1, 3, 5]),)
print(np.argwhere(a > 0)) # [[1] [3] [5]]불리언 인덱싱과 고급 인덱싱 결합하기
두 방식을 함께 사용할 수 있습니다. 불리언 마스크로 행을 필터링한 다음 고급 인덱싱으로 열 순서를 바꾸세요. 두 방식을 결합하면 한 번의 깔끔한 단계로 데이터를 필터링하고 재배열할 수 있습니다.
import numpy as np
data = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
scores = np.array([0.9, 0.3, 0.8])
# Keep high-scoring rows, reorder columns to [2, 0, 1]
high = data[scores > 0.5]
reordered = high[:, [2, 0, 1]]
print(reordered)성능: 불리언 인덱싱과 고급 인덱싱 비교
불리언 인덱싱과 고급 인덱싱은 모두 복사본을 반환합니다. 필터링에는 불리언 마스크가 대체로 가장 읽기 쉽고 충분히 빠르므로 기본 선택으로 사용하기 좋습니다.
import numpy as np
a = np.random.rand(1_000_000)
# Boolean mask -- readable and fast
result = a[a > 0.5]
print('filtered size:', result.size) # ~500000
# Equivalent with np.where + fancy index
idx = np.where(a > 0.5)[0]
result2 = a[idx]
print('same result:', np.array_equal(result, result2))빠른 확인
이 수업에서 배운 불리언 마스킹과 고급 인덱싱에 대한 이해도를 확인해 보세요.
수업 요약
잘하셨습니다! 불리언 마스크는 필터링하고 복사하며, np.where는 배열의 형상을 유지하고, 고급 인덱싱은 지정한 요소를 원하는 대로 가져옵니다. 다음 주제는 Pandas Series입니다!
자주 묻는 질문
“불리언 마스킹과 고급 인덱싱” 강의는 무료인가요?
네 — “불리언 마스킹과 고급 인덱싱” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Pandas & NumPy Academy 강의 전체를 잠금 해제할 수 있습니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“불리언 마스킹과 고급 인덱싱”에서 뭘 배우나요?
불리언 조건으로 배열을 필터링하고 정수 인덱스 배열을 사용해 임의의 원소를 선택합니다. 브라우저에서 직접 실행하는 실습 코드로 Pandas & NumPy Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Pandas & NumPy Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Pandas & NumPy Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“불리언 마스킹과 고급 인덱싱” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Pandas & NumPy Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Pandas & NumPy Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 범용 함수(ufunc)
- 집계 함수
- 브로드캐스팅 규칙
- 불리언 마스킹과 고급 인덱싱