1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
use crate::number::Number; use std::collections::HashMap; pub mod index; pub mod mul; pub mod mul_lhs; pub mod mul_rhs; #[derive(Clone, Debug, Default)] pub struct SparseMatrix<T = f64> where T: Number, { pub rows: usize, pub cols: usize, pub elems: HashMap<(usize, usize), T>, default: T, } impl<T> SparseMatrix<T> where T: Number, { pub fn new(rows: usize, cols: usize) -> Self { Self { rows, cols, elems: HashMap::new(), default: T::default(), } } pub fn from(rows: usize, cols: usize, elems: HashMap<(usize, usize), T>) -> Self { Self { rows, cols, elems, default: T::default(), } } pub fn t(&self) -> Self { Self::from( self.cols, self.rows, self.elems.iter().fold( HashMap::<(usize, usize), T>::new(), |mut m: HashMap<(usize, usize), T>, (&(i, j), &value)| { m.insert((j, i), value); m }, ), ) } }