pub trait Matrix: VectorSpacewhere
Self::Scalar: BaseFloat,
Self: Index<usize, Output = Self::Column> + IndexMut<usize, Output = Self::Column> + ApproxEq<Epsilon = <Self as VectorSpace>::Scalar>,{
type Row: VectorSpace<Scalar = Self::Scalar> + Array<Element = Self::Scalar>;
type Column: VectorSpace<Scalar = Self::Scalar> + Array<Element = Self::Scalar>;
type Transpose: Matrix<Scalar = Self::Scalar, Row = Self::Column, Column = Self::Row>;
// Required methods
fn row(&self, r: usize) -> Self::Row;
fn swap_rows(&mut self, a: usize, b: usize);
fn swap_columns(&mut self, a: usize, b: usize);
fn swap_elements(&mut self, a: (usize, usize), b: (usize, usize));
fn transpose(&self) -> Self::Transpose;
// Provided methods
fn as_ptr(&self) -> *const Self::Scalar { ... }
fn as_mut_ptr(&mut self) -> *mut Self::Scalar { ... }
fn replace_col(&mut self, c: usize, src: Self::Column) -> Self::Column { ... }
}
Expand description
A column-major matrix of arbitrary dimensions.
Because this is constrained to the VectorSpace
trait, this means that
following operators are required to be implemented:
Matrix addition:
Add<Output = Self>
Sub<Output = Self>
Neg<Output = Self>
Scalar multiplication:
Mul<Self::Scalar, Output = Self>
Div<Self::Scalar, Output = Self>
Rem<Self::Scalar, Output = Self>
Note that matrix multiplication is not required for implementors of this
trait. This is due to the complexities of implementing these operators with
Rust’s current type system. For the multiplication of square matrices,
see SquareMatrix
.
Required Associated Types§
sourcetype Row: VectorSpace<Scalar = Self::Scalar> + Array<Element = Self::Scalar>
type Row: VectorSpace<Scalar = Self::Scalar> + Array<Element = Self::Scalar>
The row vector of the matrix.
Required Methods§
sourcefn swap_columns(&mut self, a: usize, b: usize)
fn swap_columns(&mut self, a: usize, b: usize)
Swap two columns of this array.
Provided Methods§
sourcefn as_mut_ptr(&mut self) -> *mut Self::Scalar
fn as_mut_ptr(&mut self) -> *mut Self::Scalar
Get a mutable pointer to the first element of the array.
sourcefn replace_col(&mut self, c: usize, src: Self::Column) -> Self::Column
fn replace_col(&mut self, c: usize, src: Self::Column) -> Self::Column
Replace a column in the array.