Crate matreex

Source
Expand description

A simple matrix implementation.

§Quick Start

First, we need to import matrix!.

use matreex::matrix;

§Addition

let lhs = matrix![[1, 2, 3], [4, 5, 6]];
let rhs = matrix![[2, 2, 2], [2, 2, 2]];
assert_eq!(lhs + rhs, matrix![[3, 4, 5], [6, 7, 8]]);

§Subtraction

let lhs = matrix![[1, 2, 3], [4, 5, 6]];
let rhs = matrix![[2, 2, 2], [2, 2, 2]];
assert_eq!(lhs - rhs, matrix![[-1, 0, 1], [2, 3, 4]]);

§Multiplication

let lhs = matrix![[1, 2, 3], [4, 5, 6]];
let rhs = matrix![[2, 2], [2, 2], [2, 2]];
assert_eq!(lhs * rhs, matrix![[12, 12], [30, 30]]);

§Division

let lhs = matrix![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
let rhs = matrix![[2.0, 2.0, 2.0], [2.0, 2.0, 2.0]];
assert_eq!(lhs / rhs, matrix![[0.5, 1.0, 1.5], [2.0, 2.5, 3.0]]);

Wait, matrix division isn’t well-defined, remember? It won’t compile. But don’t worry, you might just need to perform elementwise division:

let lhs = matrix![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
let rhs = matrix![[2.0, 2.0, 2.0], [2.0, 2.0, 2.0]];
assert_eq!(
    lhs.elementwise_operation(&rhs, |left, right| left / right),
    Ok(matrix![[0.5, 1.0, 1.5], [2.0, 2.5, 3.0]])
);

Or scalar division:

let matrix = matrix![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
assert_eq!(matrix / 2.0, matrix![[0.5, 1.0, 1.5], [2.0, 2.5, 3.0]]);

let matrix = matrix![[1.0, 2.0, 4.0], [8.0, 16.0, 32.0]];
assert_eq!(2.0 / matrix, matrix![[2.0, 1.0, 0.5], [0.25, 0.125, 0.0625]]);

Or maybe the inverse of a matrix?

Nah, we don’t have that yet.

§FAQs

§Why named matreex?

Hmm … Who knows? Could be a name conflict.

§Is it no_std compatible?

This crate is no_std compatible if the parallel feature is not enabled.

Re-exports§

pub use self::error::Error;
pub use self::error::Result;
pub use self::index::Index;
pub use self::index::WrappingIndex;
pub use self::order::Order;
pub use self::shape::Shape;

Modules§

convert
Provides and implements traits for matrix conversions.
error
Error handling for the crate.
index
Defines indexing operations.
iter
Defines iterating operations.
order
Describes the memory layout of a matrix.
parallel
Defines parallel operations.
shape
Describes the shape of a matrix.

Macros§

matrix
Creates a new Matrix<T> from literal.

Structs§

Matrix
Matrix<T> means matrix.