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)
서브목차