4 个版本

0.2.0 2021 年 11 月 21 日
0.1.3 2020 年 6 月 11 日
0.1.1 2019 年 10 月 18 日
0.1.0 2019 年 10 月 18 日

#678 in 数学


2 个包中使用 (通过 coaster-blas)

MIT 许可证

140KB
4K SLoC

rust-blas

MIT licensed

Rust 对 BLAS (基本线性代数子程序) 的绑定和包装器。

概述

RBLAS 使用与外部调用相同名称的特性和静态方法包装每个外部调用。这些特性和静态方法泛型覆盖 BLAS 支持的四种主要数字类型:f32f64Complex32Complex64

例如,函数 cblas_saxpycblas_daxpycblas_caxypycblas_zaxpy 使用函数 Axpy::axpy 调用。

此外,RBLAS 还引入了一些特性来缩短这些 BLAS 函数的调用:用于实现类似向量特性的类型的 Vector 和用于实现类似矩阵特性的类型的 Matrix。特性和类型 Vector 已经由 Vec[] 类型实现。

文档

安装

默认情况下,库以动态方式链接到 blas。要链接到替代实现,例如 OpenBLAS,请使用环境变量 CARGO_BLAS。如果您已经构建了绑定,可能需要清理并重新构建。

export CARGO_BLAS=openblas

示例

extern crate rblas;

use rblas::Dot;

fn main() {
    let x = vec![1.0, -2.0, 3.0, 4.0];
    let y = [1.0, 1.0, 1.0, 1.0, 7.0];

    let d = Dot::dot(&x, &y[..x.len()]);
    assert_eq!(d, 6.0);
}

糖化示例(即将弃用)

#[macro_use]
extern crate rblas as blas;
use blas::math::Mat;
use blas::{Matrix, Vector};
use blas::math::Marker::T;

fn main() {
    let x = vec![1.0, 2.0];
    let xr = &x as &Vector<_>;
    let i = mat![1.0, 0.0; 0.0, 1.0];
    let ir = &i as &Matrix<_>;

    assert!(xr + &x == 2.0 * xr);
    assert!(ir * xr == x);

    let dot = (xr ^ T) * xr;
    assert!(dot == 5.0);
}

依赖项

~515KB
~11K SLoC