项目作者: vbarrielle

项目描述 :
sparse linear algebra library for rust
高级语言: Rust
项目地址: git://github.com/vbarrielle/sprs.git
创建时间: 2015-05-17T19:01:01Z
项目社区:https://github.com/vbarrielle/sprs

开源协议:Other

下载


sprs, sparse matrices for Rust

Build status
crates.io

sprs implements some sparse matrix data structures and linear algebra
algorithms in pure Rust.

The API is a work in progress, and feedback on its rough edges is highly
appreciated :)

Features

Structures

  • CSR/CSC matrix
  • triplet matrix
  • Sparse vector

Operations

  • sparse matrix / sparse vector product
  • sparse matrix / sparse matrix product
  • sparse matrix / sparse matrix addition, subtraction
  • sparse vector / sparse vector addition, subtraction, dot product
  • sparse/dense matrix operations

Algorithms

  • Outer iterator on compressed sparse matrices
  • sparse vector iteration
  • sparse vectors joint non zero iterations
  • simple sparse Cholesky decomposition (requires opting into an LGPL license)
  • sparse triangular solves with dense right-hand side

Examples

Matrix construction

  1. use sprs::{CsMat, CsMatOwned, CsVec};
  2. let eye : CsMatOwned<f64> = CsMat::eye(3);
  3. let a = CsMat::new_csc((3, 3),
  4. vec![0, 2, 4, 5],
  5. vec![0, 1, 0, 2, 2],
  6. vec![1., 2., 3., 4., 5.]);

Matrix vector multiplication

  1. use sprs::{CsMat, CsVec};
  2. let eye = CsMat::eye(5);
  3. let x = CsVec::new(5, vec![0, 2, 4], vec![1., 2., 3.]);
  4. let y = &eye * &x;
  5. assert_eq!(x, y);

Matrix matrix multiplication, addition

  1. use sprs::{CsMat, CsVec};
  2. let eye = CsMat::eye(3);
  3. let a = CsMat::new_csc((3, 3),
  4. vec![0, 2, 4, 5],
  5. vec![0, 1, 0, 2, 2],
  6. vec![1., 2., 3., 4., 5.]);
  7. let b = &eye * &a;
  8. assert_eq!(a, b.to_csr());

For a more complete example, be sure to check out the heat diffusion example.

Documentation

Documentation is available at docs.rs.

Changelog

See the changelog.

Minimum Supported Rust Version

The minimum supported Rust version currently is 1.64. Prior to a 1.0 version,
bumping the MSRV will not be considered a breaking change, but breakage will
be avoided on a best effort basis.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally
submitted for inclusion in the work by you, as defined in the Apache-2.0
license, shall be dual licensed as above, without any additional terms or
conditions.

Please see the contribution guidelines for additional information about
contributing.