Weighted inner product of 2 vectors `a` and `b` with weight `w`. Calculated as `\sum_{i=0}(a_i * b_i * w^{i+1})`
(a: &[F], b: &[F], w: &F)
| 48 | |
| 49 | /// Weighted inner product of 2 vectors `a` and `b` with weight `w`. Calculated as `\sum_{i=0}(a_i * b_i * w^{i+1})` |
| 50 | pub fn weighted_inner_product<F: Field>(a: &[F], b: &[F], w: &F) -> F { |
| 51 | let size = a.len().min(b.len()); |
| 52 | |
| 53 | let mut weights = powers(w, size as u32 + 1); |
| 54 | weights.remove(0); |
| 55 | |
| 56 | let product = cfg_into_iter!(0..size).map(|i| a[i] * b[i] * weights[i]); |
| 57 | |
| 58 | let zero = F::zero; |
| 59 | cfg_iter_sum!(product, zero) |
| 60 | } |
| 61 | |
| 62 | /// Weighted inner product of the vector `n` with itself. Calculated as `\sum_{i=0}(n_i * n_i * w^{i+1})` |
| 63 | pub fn weighted_norm<F: Field>(n: &[F], w: &F) -> F { |