← 문제 목록/Pairwise Euclidean (행렬 분해 트릭) [medium]
문제 해설

Pairwise Euclidean (행렬 분해 트릭) [medium]

선형대수 · medium

preview

Pairwise Euclidean (행렬 분해 트릭) [medium]

v1 유클리드 거리 는 단일 쌍. 실전에서는 두 집합 간 모든 쌍 의 거리가 자주 필요합니다. 단순한 루프는 O(NMd)O(NMd) 지만 매트릭스 분해 트릭 으로 더 효율적이고 벡터화 친화적:

xiyj2=xi22xiyj+yj2\|x_i - y_j\|^2 = \|x_i\|^2 - 2 \, x_i \cdot y_j + \|y_j\|^2

  • X @ Y.T 한 번 계산 → O(NMd)O(NMd) 이지만 BLAS 활용해 단일 matmul.
  • 행·열 방향으로 제곱 노름 브로드캐스트.

수치 안정성 함정

sqrt(clip(squared, 0, ∞)) 안 하면 부동소수 오차로 음수 가 생겨 NaN. 같은 점끼리 (i=j, X=Y 일 때) 이 문제가 특히 잘 발생.

과제

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

  • X shape (N, d), Y shape (M, d).
  • 반환: shape (N, M), 값 = XiYj2\|X_i - Y_j\|_2.
  • 루프 금지.
  • 수치 안정성 필수: sqrt 전에 clip(min=0).

힌트

xx = (X ** 2).sum(axis=1, keepdims=True)  # (N, 1)
yy = (Y ** 2).sum(axis=1)                 # (M,)
sq = xx - 2 * X @ Y.T + yy                # (N, M)
return np.sqrt(np.clip(sq, 0, None))

테스트 케이스

#이름검증
1shape (N, M)
2X=Y, 대각=0자기 자신 거리
3수동 루프와 일치정확성
4대칭 (X==Y 면 대각 대칭)
5큰 스케일에서도 NaN 없음수치 안정
6루프 금지
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.