ndarray-rblas 0.1.1

`rblas` bindings for `ndarray`.
Documentation

Experimental rblas and BLAS (Basic Linear Algebra Subprograms) integration

Note: This crate is for explicitly integrating with the rblas crate and its API. ndarray can use BLAS by itself too.

Depends on crate rblas, (docs).

extern crate ndarray;
extern crate ndarray_rblas;
extern crate rblas;

use rblas::Gemv;
use rblas::attribute::Transpose;

use ndarray::{arr1, arr2};
use ndarray_rblas::AsBlas;

fn main() {
    // Gemv is the operation y = α a x + β y
    let alpha = 1.;
    let mut a = arr2(&[[1., 2., 3.],
                       [4., 5., 6.],
                       [7., 8., 9.]]);
    let x = [1., 0., 1.];
    let beta = 1.;
    let mut y = arr1(&[0., 0., 0.]);

    Gemv::gemv(Transpose::NoTrans, &alpha, &a.blas(), &x[..],
               &beta, &mut y.blas());

    assert_eq!(y, arr1(&[4., 10., 16.]));
}

Use the methods in trait AsBlas to convert an array into a view that implements rblas’ Vector or Matrix traits.

Blas supports strided vectors and matrices; Matrices need to be contiguous in their lowest dimension, so they will be copied into c-contiguous layout automatically if needed. You should be able to use blocks sliced out from a larger matrix without copying. Use the transpose flags in blas instead of transposing with ndarray.

Blas has its own error reporting system and will not panic on errors (that I know), instead output its own error conditions, for example on dimension mismatch in a matrix multiplication.