matrixable
A crate providing utilities for matrix manipulation.
Example
use MatrixExt;
Output:
Rows
0: [1, 0, 0]
1: [0, 1, 0]
2: [0, 0, 1]
Columns
0: [1, 0, 0]
1: [0, 1, 0]
2: [0, 0, 1]
Diagonals
0: [0]
1: [0, 0]
2: [1, 1, 1]
3: [0, 0]
4: [0]
Properties:
* Dimensions: (3, 3)
* Square matrix: true
* Symmetric: true
* Skew-symmetric: false
* Diagonal matrix: true
* Scalar matrix: true
* Constant matrix: false
This library has two main traits: MatrixExt and MatrixMutExt.
MatrixExt
This trait requires three methods to be implemented:
num_rows: which should give the number of rows of the matrix.num_cols: which should give the the number of columns.get: which may return a reference to an element of the matrix.
Once these methods are implemented, the following features automatically become available:
- immutability: All the functions provided by this trait does not modify elements of the matrix-like struct unless that struct is consumed in the process.
- iterators: iteratate over all elements and also over rows, columns and diagonals.
- access: elements differently without changing their positions: transpose access, rotate access, submatrix...
- transformation: transform struct into another type, maybe another matrix.
- metadata: obtain information about the matrix: symmetry, dimensions, diagonality...
MatrixMutExt
This traits requires for the struct to first implement MatrixExt as well as its single required method: get_mut.
Once implemented MatrixMutExt structs inherits features from MatrixExt plus the following:
- mutability: Functions provided by this trait allow elements to be mutated. Mutable versions of the above features also become available (iterators, access).
- in-place modification.
Important
- Note also that this crate extends the standard 2D array
[[T; N]; M]. - This crate support
no_stdenvironments since ver0.3.0.
More
See this documentation for additional informations.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.