
v1 Chebyshev 는 X[:, None, :] - Y[None, :, :] 브로드캐스팅으로 깔끔. 문제: 메모리.
, 이면 중간 배열 = 128 GB fp64. OOM.
를 크기 씩 잘라 → 만 만들어가며 결과 행렬을 채움:
for s in range(0, N, B):
X_chunk = X[s:s+B] # (B, D)
diff = X_chunk[:, None, :] - Y[None, :, :] # (B, M, D)
D[s:s+B] = np.max(np.abs(diff), axis=-1) # (B, M)
메모리: 만. 으로 잡으면 위 예시에서 2.6 GB 정도 — 수십 배 개선.
B=N 이면 v1 과 같아짐 (경계 케이스).B > N 도 받아들여야 (자연스럽게 한 번에 처리).함수 pairwise_chebyshev_chunked(X, Y, chunk_size) 를 완성하세요.
X shape (N, D), Y shape (M, D).chunk_size 양의 정수.(N, M).np.empty((N, M))) 후 X 를 청크 단위로 채움.| # | 이름 | 검증 |
|---|---|---|
| 1 | shape (N, M) | |
| 2 | v1 (청크 없는) 결과와 일치 | |
| 3 | chunk_size=1 에서도 정답 | |
| 4 | chunk_size > N 일 때 통째로 처리 | |
| 5 | X=Y 대각 = 0 | |
| 6 | 대형 N 에서 메모리 제한 내 실행 | 간접 검증: 100×1000 입력 |
| 7 | 대칭: D(X, Y) == D(Y, X).T |
코드를 작성하고 Run 을 눌러보세요.