ark_relations/utils/
matrix.rs1use ark_ff::Field;
2use ark_std::vec::Vec;
3pub type Matrix<F> = Vec<Vec<(F, usize)>>;
5
6#[must_use]
8pub fn transpose<F: Field>(matrix: &Matrix<F>, num_col: usize) -> Matrix<F> {
9 let mut transposed: Matrix<F> = vec![Vec::new(); num_col];
11
12 for (row_index, row) in matrix.iter().enumerate() {
14 for &(value, col_index) in row {
15 transposed[col_index].push((value, row_index));
18 }
19 }
20
21 transposed
23}
24
25pub fn mat_vec_mul<F: Field>(matrix: &Matrix<F>, vector: &[F]) -> Vec<F> {
27 let mut output: Vec<F> = Vec::new();
28 for row in matrix {
29 let mut sum: F = F::zero();
30 for (value, col) in row {
31 sum += vector[*col] * value;
32 }
33 output.push(sum);
34 }
35 output
36}