4.12.3 축(Axis) 연산 응용 미션
아래 실적표 데이터를 계속해서 활용하여 연산 문제를 풀어보세요.
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번 행
])
📝 [문제]
문제 7 (가로축 연산) 행렬 B의 각 행별 숫자의 통합 합계(Sum)가 전체 20보다 “크거나 같은” 우수한 성적을 거둔 행 집단만 선택하여 새로운 행렬을 만드시오. (힌트: 가로로 각 열을 압축하여 합을 구하려면
axis=1)
문제 8 (세로축 연산과 위치 찾기) 행렬 B에서 각 과목(열) 별로 세로 방향 수학 평균 점수(Mean)를 구하고, 그 평균이 5 이상인 열(Column)이 전체 행렬의 몇 번째 인덱스(위치 번호)에 랭크되어 있는지
np.where()함수를 사용하여 콕 집어 찾아내시오.
(정답은 충분히 고민한 후 아래로 스크롤하세요!)
🎯 [정답 및 해설]
[문제 7 정답]
행 내부에 나열되어 있는 서로 다른 열들의 값을 하나로 더해야 하므로 열(Columns) 공간을 압축해 버리는 axis=1 축 방향 속성을 지정해야 합니다.
# 각 행(Row)별 요소 합계 구하기
row_sums = np.sum(B, axis=1)
# 구해진 합계를 마스킹 조건으로 넘겨 전체 행렬 B 슬라이싱
B_row_sums_filtered = B[row_sums >= 20, :]
print("합계 20 통과 집단:\n", B_row_sums_filtered)
[문제 8 정답]
이번엔 반대로 세로로 아래로 내려가며 모든 행의 값을 짓눌러서 평균을 내어 하나로 만들어야 하므로 행 공간을 압축하는 axis=0을 지정해야 합니다. 이후 배열 내의 인덱스 좌표 번호만 빼오기 위해 length 0번 요소를 호출합니다.
col_means = np.mean(B, axis=0)
col_indices = np.where(col_means >= 5)[0]
print("평균 점수가 선방한 열(Column)들의 인덱스 좌표 번호:", col_indices)
서브목차