NumPy 기초·연습 문제

Frobenius 노름

문제 설명PROBLEM

preview

Frobenius 노름

행렬의 "크기"를 재는 가장 자연스러운 방법 — 모든 원소 제곱의 합의 제곱근:

AF=i,jAij2\|A\|_F = \sqrt{\sum_{i,j} A_{ij}^2}

벡터의 L2 노름을 행렬로 확장한 것과 같습니다. 숫자 계산·회귀·저랭크 근사 오차 평가 등에 두루 쓰입니다.

성질

  • 항상 ≥ 0
  • 0 은 영행렬일 때만
  • 스케일 선형: cAF=cAF\|cA\|_F = |c| \|A\|_F
  • AF2=tr(AA)=iσi2\|A\|_F^2 = \text{tr}(A^\top A) = \sum_i \sigma_i^2 (특이값 제곱합)

과제

함수 frobenius(A) 를 완성하세요.

  • A shape (M, N) (또는 어떤 shape든 상관없음).
  • 반환: Python float.
  • np.linalg.norm 사용 금지np.sum, np.sqrt, ** 로 직접 구현.

테스트 케이스

#이름검증
1영행렬 → 0
2단위행렬 → √N3×3 항등행렬 → √3
3스케일 선형성`‖cA‖ =
4√trace(A^T A)임의 정사각 행렬
5np.linalg.norm(A, 'fro') 일치
6np.linalg.norm 금지소스에 호출 없음
개념 노트와 실수 포인트

NumPy 기초

  • ⚠️ axis 헷갈림: axis=0 은 행을 가로질러 → 열별 결과, axis=1행별 결과.
  • 브로드캐스팅: shape 를 뒤에서부터 맞춤(1 또는 같은 크기).
  • 반복문 대신 벡터화 연산. @(행렬곱) 와 *(요소곱) 구분.