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)
140KB
4K SLoC
rust-blas
Rust 对 BLAS (基本线性代数子程序) 的绑定和包装器。
概述
RBLAS 使用与外部调用相同名称的特性和静态方法包装每个外部调用。这些特性和静态方法泛型覆盖 BLAS 支持的四种主要数字类型:f32
、f64
、Complex32
和 Complex64
。
例如,函数 cblas_saxpy
、cblas_daxpy
、cblas_caxypy
和 cblas_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