← 문제 목록/Chunked Chebyshev (메모리 효율) [medium]
문제 해설

Chunked Chebyshev (메모리 효율) [medium]

거리 계산 · medium

preview

Memory-Efficient Chebyshev [medium]

v1 ChebyshevX[:, None, :] - Y[None, :, :] 브로드캐스팅으로 깔끔. 문제: 메모리.

N=M=10,000N = M = 10{,}000, D=128D = 128 이면 중간 배열 (N,M,D)=10000×10000×128(N, M, D) = 10000 \times 10000 \times 128 = 128 GB fp64. OOM.

해결: 청크 단위 순회

XX 를 크기 BB 씩 잘라 (B,M,D)(B, M, D)(B,M)(B, M) 만 만들어가며 결과 행렬을 채움:

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)

메모리: BMDB \cdot M \cdot D 만. B=256B = 256 으로 잡으면 위 예시에서 2.6 GB 정도 — 수십 배 개선.

고려사항

  • 결과는 vanilla pairwise 와 동일 해야 (허용 오차 0).
  • B=N 이면 v1 과 같아짐 (경계 케이스).
  • B > N 도 받아들여야 (자연스럽게 한 번에 처리).
  • chunk 크기가 메모리 / 시간 trade-off 인데, 이 과제는 정확성 만 검증.

과제

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

  • X shape (N, D), Y shape (M, D).
  • chunk_size 양의 정수.
  • 반환: shape (N, M).
  • 힌트: 결과 행렬을 미리 할당 (np.empty((N, M))) 후 X 를 청크 단위로 채움.

테스트 케이스

#이름검증
1shape (N, M)
2v1 (청크 없는) 결과와 일치
3chunk_size=1 에서도 정답
4chunk_size > N 일 때 통째로 처리
5X=Y 대각 = 0
6대형 N 에서 메모리 제한 내 실행간접 검증: 100×1000 입력
7대칭: D(X, Y) == D(Y, X).T
코드 작성
Loading...
실행 결과

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