4.12.2 인덱싱 & 불리언 필터링 응용
아래와 같은 실적표 행렬 B가 주어졌다고 가정해 봅시다. 행렬 정보를 바탕으로 필터링 미션에 도전하세요!
import numpy as np
B = np.array([
[ 8, 10, 7, 8], # 0번 행 (Row)
[ 2, 4, 5, 5], # 1번 행
[ 7, 6, 1, 7], # 2번 행
[ 2, 6, 8, 6], # 3번 행
[ 9, 3, 4, 2] # 4번 행
])
📝 [문제]
문제 4 (다차원 인덱싱) 행렬 B에서 2번째, 4번째, 5번째 줄(Row) 전체만을 선택하여 뚝 떼어내시오. (파이썬의 인덱스는 0부터 시작한다는 것을 꼭 잊지 마세요!)
문제 5 (결합 필터링) 행렬 B 구조에서, 열(Column)들 중 앞에서 3번째 위치한 열(인덱스 번호 2)의 숫자가 3보다 ‘큰’ 데이터가 포함된 행(Row) 전체를 모두 발췌하시오. (힌트: 불리언 마스킹)
문제 6 (조건부 마스킹) 아래의 시험 점수 벡터에서 80점 이상인 합격자 점수만 골라내어 부분 배열로 출력하시오.
scores = np.array([55, 88, 92, 70, 65, 82])
(정답은 충분히 고민한 후 아래로 스크롤하세요!)
🎯 [정답 및 해설]
[문제 4 정답]
행(Row)에 대한 다차원 인덱싱 기법입니다. 파이썬은 무조건 0부터 첫 인덱스를 세기 시작하므로, 2번째 줄은 1, 4번째 줄은 3, 5번째 줄은 4를 입력해야 합니다.
B_selected = B[[1, 3, 4], :]
print("선택된 분리 행렬:\n", B_selected)
[문제 5 정답]
불리언(논리) 배열 색인을 2차원으로 확장하는 매우 중요한 실무 스킬 스니펫(Snippet)입니다. 먼저 B[:, 2]를 통해 해당 조건 열 공간을 전체로(:) 불러와 비교합니다.
# 조건 생성: B의 모든 열(:) 중에서 [2]번 인덱스의 값이 3보다 큰가?
# 마스킹 적용: 참/거짓 마스크를 행 단위의 조건 인덱스에 입력
B_filtered = B[B[:, 2] > 3, :]
print("특정 조건의 행들:\n", B_filtered)
[문제 6 정답]
scores = np.array([55, 88, 92, 70, 65, 82])
# 마스크(조건 배지) 생성 (80점 이상)
mask = scores >= 80
# 브로드캐스팅 필터링
high_scores = scores[mask]
print(high_scores)
# 출력: [88 92 82]
서브목차