Function
train_codebooks
(
rotated: &[Vec<f32>],
m: usize,
k: usize,
sub_dim: usize,
kmeans_iters: usize,
seed: u64,
)
Source from the content-addressed store, hash-verified
| 229 | } |
| 230 | |
| 231 | fn train_codebooks( |
| 232 | rotated: &[Vec<f32>], |
| 233 | m: usize, |
| 234 | k: usize, |
| 235 | sub_dim: usize, |
| 236 | kmeans_iters: usize, |
| 237 | seed: u64, |
| 238 | ) -> Vec<Vec<Vec<f32>>> { |
| 239 | let mut codebooks = Vec::with_capacity(m); |
| 240 | for s in 0..m { |
| 241 | let offset = s * sub_dim; |
| 242 | let sub_vecs: Vec<Vec<f32>> = rotated |
| 243 | .iter() |
| 244 | .map(|v| v[offset..offset + sub_dim].to_vec()) |
| 245 | .collect(); |
| 246 | let centroids = lloyd( |
| 247 | &sub_vecs, |
| 248 | sub_dim, |
| 249 | k, |
| 250 | kmeans_iters, |
| 251 | seed ^ (s as u64 * 0x1234567), |
| 252 | ); |
| 253 | codebooks.push(centroids); |
| 254 | } |
| 255 | codebooks |
| 256 | } |
| 257 | |
| 258 | fn make_uqv(codes: &[u8], dim: u16) -> UnifiedQuantizedVector { |
| 259 | let header = QuantHeader { |
Tested by
no test coverage detected