#线性代数 #GraphBLAS #稀疏 #SuiteSparse #线性 #代数 #矩阵运算

graphblas_sparse_linear_algebra

SuiteSparse:GraphBLAS的封装

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 数学

Download history 4/week @ 2024-05-04 8/week @ 2024-05-18 2/week @ 2024-05-25 155/week @ 2024-06-01 454/week @ 2024-06-08 32/week @ 2024-06-15 18/week @ 2024-06-29 107/week @ 2024-07-06 13/week @ 2024-07-13 170/week @ 2024-07-20 248/week @ 2024-07-27 6/week @ 2024-08-03 160/week @ 2024-08-10 67/week @ 2024-08-17

每月下载量 484次
用于 2 crates

CC-BY-NC-4.0

2MB
39K SLoC

test

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