
v1 유클리드 거리 는 단일 쌍. 실전에서는 두 집합 간 모든 쌍 의 거리가 자주 필요합니다. 단순한 루프는 지만 매트릭스 분해 트릭 으로 더 효율적이고 벡터화 친화적:
X @ Y.T 한 번 계산 → 이지만 BLAS 활용해 단일 matmul.sqrt(clip(squared, 0, ∞)) 안 하면 부동소수 오차로 음수 가 생겨 NaN. 같은 점끼리 (i=j, X=Y 일 때) 이 문제가 특히 잘 발생.
함수 pairwise_euclidean(X, Y) 를 완성하세요.
X shape (N, d), Y shape (M, d).(N, M), 값 = .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))
| # | 이름 | 검증 |
|---|---|---|
| 1 | shape (N, M) | |
| 2 | X=Y, 대각=0 | 자기 자신 거리 |
| 3 | 수동 루프와 일치 | 정확성 |
| 4 | 대칭 (X==Y 면 대각 대칭) | |
| 5 | 큰 스케일에서도 NaN 없음 | 수치 안정 |
| 6 | 루프 금지 |
코드를 작성하고 Run 을 눌러보세요.