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: Iterate over all elements and also over rows, columns and diagonals.
- access: Access elements differently without changing their positions: transpose access, rotate access, sub-matrix...
- transformation: Transform struct into another type, maybe another matrix.
- metadata: Get information about the matrix: symmetry, dimensions, diagonality...
MatrixMutExt
This trait 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.
[dependencies]
Important
- Note also that this crate extends the standard 2D array
[[T; N]; M], now available through theimplsdefault feature. The default features can be disabled by settingdefault-featuresparameter tofalseas follows:= { = "0.5.0", = false } - This crate support
no_stdenvironments since ver0.3.0. - Many improvements and changes have been done since the beginning of this project. Please see to the
CHANGELOGfor more details. - Your help and suggestions on improving this crate are highly encouraged. So please feel comfortable to report any issue you may encounter!
More
See the documentation for additional information on the library.
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.