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