NumPy 기초·연습 문제

맨해튼 거리 행렬

문제 설명PROBLEM

preview

맨해튼 거리 행렬 (L1)

8번 에서 유클리드(L2) 거리 행렬을 만들었죠. 이번엔 맨해튼(L1) 거리 — 제곱·루트 없이 절댓값 합.

Dij=kxikyjkD_{ij} = \sum_k |x_{ik} - y_{jk}|

격자 위의 "택시 거리"라 이름 붙은 지표. 이상치에 덜 민감 하고 희소(sparse) 데이터에서 자주 쓰입니다.

과제

함수 pairwise_manhattan(X, Y) 를 완성하세요.

  • X shape (N, D), Y shape (M, D) → 반환 (N, M).
  • 루프 없이 브로드캐스팅.
  • np.abs, np.sum(axis=-1) 조합.

테스트 케이스

#이름검증
11점 vs 1점[[0,0]], [[3,4]][[7]]
2shapeX (3,5), Y (4,5)(3,4)
3X=Y 대각선 0diag ≈ 0
4대칭D == D.T when X==Y
5루프 없이for/while 금지
개념 노트와 실수 포인트

NumPy 기초

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