89个版本 (51个重大更新)
0.52.0 | 2024年8月16日 |
---|---|
0.50.0 | 2024年7月31日 |
0.43.0 | 2024年3月17日 |
0.36.0 | 2023年11月28日 |
0.3.0 | 2021年7月8日 |
#45 in 数学
每月下载量 484次
用于 2 crates
2MB
39K SLoC
graphblas_sparse_linear_algebra
Rust的SuiteSparse:GraphBLAS封装
最小示例
use graphblas_sparse_linear_algebra::collections::sparse_matrix::operations::{
FromMatrixElementList, GetSparseMatrixElementValue,
};
use graphblas_sparse_linear_algebra::collections::sparse_matrix::{
MatrixElementList, Size, SparseMatrix,
};
use graphblas_sparse_linear_algebra::collections::Collection;
use graphblas_sparse_linear_algebra::context::Context;
use graphblas_sparse_linear_algebra::operators::apply::{
ApplyBinaryOperator, BinaryOperatorApplier,
};
use graphblas_sparse_linear_algebra::operators::binary_operator::{Assignment, First};
use graphblas_sparse_linear_algebra::operators::mask::SelectEntireMatrix;
use graphblas_sparse_linear_algebra::operators::options::{
OptionsForOperatorWithMatrixAsFirstArgument, OptionsForOperatorWithMatrixAsSecondArgument,
};
fn main() {
let context = Context::init_default().unwrap();
let element_list = MatrixElementList::<u8>::from_element_vector(vec![
(1, 1, 1).into(),
(2, 1, 2).into(),
(4, 2, 4).into(),
(5, 2, 5).into(),
]);
let matrix_size: Size = (10, 15).into();
let matrix = SparseMatrix::<u8>::from_element_list(
context.clone(),
matrix_size,
element_list,
&First::<u8>::new(),
)
.unwrap();
let mut product_matrix = SparseMatrix::<u8>::new(context.clone(), matrix_size).unwrap();
let operator = BinaryOperatorApplier::new();
let first_argument = 10;
operator
.apply_with_matrix_as_left_argument(
&matrix,
&First::<u8>::new(),
first_argument,
&Assignment::new(),
&mut product_matrix,
&SelectEntireMatrix::new(context.clone()),
&OptionsForOperatorWithMatrixAsFirstArgument::new_default(),
)
.unwrap();
println!("{}", product_matrix);
assert_eq!(product_matrix.number_of_stored_elements().unwrap(), 4);
assert_eq!(product_matrix.element_value(2, 1).unwrap(), Some(2));
assert_eq!(product_matrix.element_value(9, 1).unwrap(), None);
let operator = BinaryOperatorApplier::new();
let second_argument = 10;
operator
.apply_with_matrix_as_right_argument(
second_argument,
&First::<u8>::new(),
&matrix,
&Assignment::new(),
&mut product_matrix,
&SelectEntireMatrix::new(context),
&OptionsForOperatorWithMatrixAsSecondArgument::new_default(),
)
.unwrap();
println!("{}", matrix);
println!("{}", product_matrix);
assert_eq!(product_matrix.number_of_stored_elements().unwrap(), 4);
assert_eq!(product_matrix.element_value(2, 1).unwrap(), Some(10));
assert_eq!(product_matrix.element_value(9, 1).unwrap(), None);
}
依赖关系
graphblas_sparse_linear_algebra使用了Timothy A. Davis开发的SuiteSparse:GraphBLAS实现。
从源码构建
请确保满足构建suitesparse_graphblas_sys的要求。
兼容性
graphblas_sparse_linear_algebra主要兼容GraphBLAS规范版本2.0,并使用SuiteSparse:GraphBLAS v8.2.0。
贡献
太好了,欢迎贡献。graphblas_sparse_linear_algebra和您的贡献未来可能被重新授权并集成到商业软件中。因此,当您发起pull request时,您将被要求同意贡献者许可协议。
许可
graphblas_sparse_linear_algebra根据Creative Commons Attribution Non Commercial 4.0 International许可。有关其他许可选项,请联系Sam Dekker。
依赖关系
~2.4–5.5MB
~125K SLoC