
v1 Hard threshold 은 값 기반 (|x| ≥ λ). 실무에서는 정확히 k 개만 살리고 싶을 때 가 많음 — 모델 pruning, k-sparse 분해, compressed sensing:
이것이 L0 제약 에 대한 projection (Euclidean 거리 최소화).
|x| 기준으로 내림차순 정렬. 선형 시간으로 np.argpartition 활용:
k_largest = np.argpartition(-np.abs(x), k)[:k]
mask = np.zeros_like(x, dtype=bool)
mask[k_largest] = True
return np.where(mask, x, 0)
k = 0: 모두 0 반환.k ≥ N: 원본 그대로.argpartition 이 자동).함수 top_k_hard_threshold(x, k) 를 완성하세요.
x: 1D 배열 shape (N,).k: 0 ≤ k ≤ N 정수.| # | 이름 | 검증 |
|---|---|---|
| 1 | shape 유지 | |
| 2 | k=0 → 모두 0 | |
| 3 | k=N → 원본 그대로 | |
| 4 | 정확 k 개 non-zero | |
| 5 | 유지된 값들은 ` | x |
| 6 | non-zero 위치의 값은 원본 그대로 (축소 없음) | |
| 7 | 수치 예제: [3, -5, 1, 4, -2], k=3 → [0, -5, 0, 4, 0]인지 (상위 3 = | 5 |
코드를 작성하고 Run 을 눌러보세요.