code wiki / (root) / sketch_kmeans1d.nx

sketch_kmeans1d.nx

buildroot/runtime/sketch_kmeans1d.nx

5652 B185 linesdepth 4pulls 4 transitivereach 1 importersview sourcekind sketch/demotopic sketch
docsdependenciesstructsconstsfunctions

about

sketch_kmeans1d.nx -- streaming 1D k-means clustering. Online single-pass clustering via Lloyd's-style centroid updates. For each new value x: 1. Find nearest centroid i = argmin |x - centroid[j]| 2. count[i] += 1 3. centroid[i] += (x - centroid[i]) / count[i] (running mean) Centroids initialized via simple priming: first k distinct values observed seed the centroids; subsequent values cluster against them. USE CASES: - log-message latency clustering (fast / slow / outlier) - sensor value bucketing - online categorical discretization - simple anomaly via distance-to-nearest-centroid COMPLEMENTS: - sketch_histogram: pre-defined uniform bins - sketch_kmeans1d: adaptive bins driven by data density LOSSLESS-LANGUAGE DISCIPLINE: nx_kmeans_query_centroid returns the running-mean centroid value with NX_ENV_REL_STDDEV ~ 1/sqrt(count). Production tier (exact integer running means, no probabilistic error).

dependencies 2 imports · 1 importers

syscalls.nx sketch_types.nx sketch_kmeans1d.nx sketch_kmeans1d_test.nx

imports: syscalls.nxsketch_types.nx

imported by: sketch_kmeans1d_test.nx

structs

32struct KMeans1D {

consts

29const NX_KM_MIN_K: i64 = 2
30const NX_KM_MAX_K: i64 = 1024

functions

42func nx_kmeans_alloc(k: i64) -> *KMeans1D {
called by 1: main
63func nx_kmeans_iabs(x: i64) -> i64 {
called by 1: nx_kmeans_nearest
70func nx_kmeans_nearest(m: *KMeans1D, x: i64) -> i64 {
88func nx_kmeans_observe(m: *KMeans1D, x: i64) -> i64 {
called by 1: main calls 1: nx_kmeans_nearest
121func nx_kmeans_predict(m: *KMeans1D, x: i64) -> i64 {
called by 1: main calls 1: nx_kmeans_nearest
125func nx_kmeans_centroid(m: *KMeans1D, i: i64) -> i64 {
131func nx_kmeans_count(m: *KMeans1D, i: i64) -> i64 {
137func nx_kmeans_n_clusters(m: *KMeans1D) -> i64 {
called by 1: main
141func nx_kmeans_total(m: *KMeans1D) -> i64 {
called by 1: main
147func nx_kmeans_isqrt(x: i64) -> i64 {
169func nx_kmeans_query_centroid(m: *KMeans1D, i: i64) -> *ApproxI64 {
183func nx_kmeans_memory_bytes(m: *KMeans1D) -> i64 {