use ark_ff::Field;
use ark_std::vec::Vec;
pub type Matrix<F> = Vec<Vec<(F, usize)>>;
#[must_use]
pub fn transpose<F: Field>(matrix: &Matrix<F>, num_col: usize) -> Matrix<F> {
let mut transposed: Matrix<F> = vec![Vec::new(); num_col];
for (row_index, row) in matrix.iter().enumerate() {
for &(value, col_index) in row {
transposed[col_index].push((value, row_index));
}
}
transposed
}
pub fn mat_vec_mul<F: Field>(matrix: &Matrix<F>, vector: &[F]) -> Vec<F> {
let mut output: Vec<F> = Vec::new();
for row in matrix {
let mut sum: F = F::zero();
for (value, col) in row {
sum += vector[*col] * value;
}
output.push(sum);
}
output
}