#稀疏矩阵 #矩阵 #稀疏 #二进制 #矩阵运算

sparse-bin-mat

针对行操作优化的二进制矩阵的稀疏实现

21个版本

0.7.0 2022年4月6日
0.6.2 2021年11月25日
0.6.1 2021年10月7日
0.6.0 2021年3月17日
0.3.0 2020年12月7日

#1401 in 数据结构

Download history 1/week @ 2024-04-21 1/week @ 2024-05-26 4/week @ 2024-06-09 1/week @ 2024-06-16 15/week @ 2024-06-30 105/week @ 2024-07-28

每月118次下载
用于 ldpc

MIT/Apache

110KB
2K SLoC

Sparse Bin Mat

针对行操作优化的二进制矩阵的稀疏实现。

二进制矩阵中的所有元素都是二进制域GF2的元素。也就是说,它们要么是0,要么是1,加法是模2。

快速入门

要实例化一个矩阵,您需要指定列数以及每行的1的位置。

use sparse_bin_mat::SparseBinMat;

// This is the matrix
// 1 0 1 0 1
// 0 1 0 1 0
// 0 0 1 0 0
let matrix = SparseBinMat::new(5, vec![vec![0, 2, 4], vec![1, 3], vec![2]]);

访问矩阵的元素或行很容易。但是,由于矩阵针对行操作进行了优化,如果您想要执行列操作,则需要转置矩阵。

let matrix = SparseBinMat::new(5, vec![vec![0, 2, 4], vec![1, 3], vec![2]]);
assert_eq!(matrix.row(1), Some([1, 3].as_ref()));
assert_eq!(matrix.get(0, 0), Some(1));
assert_eq!(matrix.get(0, 1), Some(0));
// The element (0, 7) is out of bound for a 3 x 5 matrix.
assert_eq!(matrix.get(0, 7), None);

矩阵引用之间实现了加法和乘法。

let matrix = SparseBinMat::new(3, vec![vec![0, 1], vec![1, 2], vec![0, 2]]);
let identity = SparseBinMat::identity(3);

let sum = SparseBinMat::new(3, vec![vec![1], vec![2], vec![0]]);
assert_eq!(&matrix + &identity, sum);

assert_eq!(&matrix * &identity, matrix);

实现了许多有用的操作和分解。这些包括但不限于

  • 秩,
  • 行阶梯形,
  • 规范形,
  • 转置,
  • 水平和垂直连接,
  • 等等...

操作是按需实现的,如果您需要新功能,请随时提出问题。

依赖关系

~1.2–2.1MB
~45K SLoC