pub type OMatrix<T, R, C> = Matrix<T, R, C, Owned<T, R, C>>;
Expand description
An owned matrix column-major matrix with R
rows and C
columns.
Because this is an alias, not all its methods are listed here. See the Matrix
type too.
Aliased Type§
struct OMatrix<T, R, C> {
pub data: <DefaultAllocator as Allocator<R, C>>::Buffer<T>,
/* private fields */
}
Fields§
§data: <DefaultAllocator as Allocator<R, C>>::Buffer<T>
The data storage that contains all the matrix components. Disappointed?
Well, if you came here to see how you can access the matrix components,
you may be in luck: you can access the individual components of all vectors with compile-time
dimensions <= 6 using field notation like this:
vec.x
, vec.y
, vec.z
, vec.w
, vec.a
, vec.b
. Reference and assignation work too:
let mut vec = Vector3::new(1.0, 2.0, 3.0);
vec.x = 10.0;
vec.y += 30.0;
assert_eq!(vec.x, 10.0);
assert_eq!(vec.y + 100.0, 132.0);
Similarly, for matrices with compile-time dimensions <= 6, you can use field notation
like this: mat.m11
, mat.m42
, etc. The first digit identifies the row to address
and the second digit identifies the column to address. So mat.m13
identifies the component
at the first row and third column (note that the count of rows and columns start at 1 instead
of 0 here. This is so we match the mathematical notation).
For all matrices and vectors, independently from their size, individual components can
be accessed and modified using indexing: vec[20]
, mat[(20, 19)]
. Here the indexing
starts at 0 as you would expect.
Implementations§
Source§impl<T, D: DimName> OMatrix<T, D, D>
impl<T, D: DimName> OMatrix<T, D, D>
§Translation and scaling in any dimension
Sourcepub fn new_scaling(scaling: T) -> Self
pub fn new_scaling(scaling: T) -> Self
Creates a new homogeneous matrix that applies the same scaling factor on each dimension.
Sourcepub fn new_nonuniform_scaling<SB>(
scaling: &Vector<T, DimNameDiff<D, U1>, SB>,
) -> Self
pub fn new_nonuniform_scaling<SB>( scaling: &Vector<T, DimNameDiff<D, U1>, SB>, ) -> Self
Creates a new homogeneous matrix that applies a distinct scaling factor for each dimension.
Sourcepub fn new_translation<SB>(
translation: &Vector<T, DimNameDiff<D, U1>, SB>,
) -> Self
pub fn new_translation<SB>( translation: &Vector<T, DimNameDiff<D, U1>, SB>, ) -> Self
Creates a new homogeneous matrix that applies a pure translation.
Source§impl<T: Scalar, R: Dim, C: Dim> OMatrix<T, R, C>where
DefaultAllocator: Allocator<R, C>,
impl<T: Scalar, R: Dim, C: Dim> OMatrix<T, R, C>where
DefaultAllocator: Allocator<R, C>,
§Generic constructors
This set of matrix and vector construction functions are all generic with-regard to the matrix dimensions. They all expect to be given the dimension as inputs.
These functions should only be used when working on dimension-generic code.
Sourcepub fn from_element_generic(nrows: R, ncols: C, elem: T) -> Self
pub fn from_element_generic(nrows: R, ncols: C, elem: T) -> Self
Creates a matrix with all its elements set to elem
.
Sourcepub fn repeat_generic(nrows: R, ncols: C, elem: T) -> Self
pub fn repeat_generic(nrows: R, ncols: C, elem: T) -> Self
Creates a matrix with all its elements set to elem
.
Same as from_element_generic
.
Sourcepub fn zeros_generic(nrows: R, ncols: C) -> Selfwhere
T: Zero,
pub fn zeros_generic(nrows: R, ncols: C) -> Selfwhere
T: Zero,
Creates a matrix with all its elements set to 0.
Sourcepub fn from_iterator_generic<I>(nrows: R, ncols: C, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
pub fn from_iterator_generic<I>(nrows: R, ncols: C, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
Creates a matrix with all its elements filled by an iterator.
Sourcepub fn from_row_iterator_generic<I>(nrows: R, ncols: C, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
pub fn from_row_iterator_generic<I>(nrows: R, ncols: C, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
Creates a matrix with all its elements filled by an row-major order iterator.
Sourcepub fn from_row_slice_generic(nrows: R, ncols: C, slice: &[T]) -> Self
pub fn from_row_slice_generic(nrows: R, ncols: C, slice: &[T]) -> Self
Creates a matrix with its elements filled with the components provided by a slice in row-major order.
The order of elements in the slice must follow the usual mathematic writing, i.e., row-by-row.
Sourcepub fn from_column_slice_generic(nrows: R, ncols: C, slice: &[T]) -> Self
pub fn from_column_slice_generic(nrows: R, ncols: C, slice: &[T]) -> Self
Creates a matrix with its elements filled with the components provided by a slice. The components must have the same layout as the matrix data storage (i.e. column-major).
Sourcepub fn from_fn_generic<F>(nrows: R, ncols: C, f: F) -> Self
pub fn from_fn_generic<F>(nrows: R, ncols: C, f: F) -> Self
Creates a matrix filled with the results of a function applied to each of its component coordinates.
Sourcepub fn identity_generic(nrows: R, ncols: C) -> Self
pub fn identity_generic(nrows: R, ncols: C) -> Self
Creates a new identity matrix.
If the matrix is not square, the largest square submatrix starting at index (0, 0)
is set
to the identity matrix. All other entries are set to zero.
Sourcepub fn from_diagonal_element_generic(nrows: R, ncols: C, elt: T) -> Self
pub fn from_diagonal_element_generic(nrows: R, ncols: C, elt: T) -> Self
Creates a new matrix with its diagonal filled with copies of elt
.
If the matrix is not square, the largest square submatrix starting at index (0, 0)
is set
to the identity matrix. All other entries are set to zero.
Sourcepub fn from_partial_diagonal_generic(nrows: R, ncols: C, elts: &[T]) -> Selfwhere
T: Zero,
pub fn from_partial_diagonal_generic(nrows: R, ncols: C, elts: &[T]) -> Selfwhere
T: Zero,
Creates a new matrix that may be rectangular. The first elts.len()
diagonal elements are
filled with the content of elts
. Others are set to 0.
Panics if elts.len()
is larger than the minimum among nrows
and ncols
.
Sourcepub fn from_rows<SB>(rows: &[Matrix<T, Const<1>, C, SB>]) -> Selfwhere
SB: RawStorage<T, Const<1>, C>,
pub fn from_rows<SB>(rows: &[Matrix<T, Const<1>, C, SB>]) -> Selfwhere
SB: RawStorage<T, Const<1>, C>,
Builds a new matrix from its rows.
Panics if not enough rows are provided (for statically-sized matrices), or if all rows do not have the same dimensions.
§Example
let m = Matrix3::from_rows(&[ RowVector3::new(1.0, 2.0, 3.0), RowVector3::new(4.0, 5.0, 6.0), RowVector3::new(7.0, 8.0, 9.0) ]);
assert!(m.m11 == 1.0 && m.m12 == 2.0 && m.m13 == 3.0 &&
m.m21 == 4.0 && m.m22 == 5.0 && m.m23 == 6.0 &&
m.m31 == 7.0 && m.m32 == 8.0 && m.m33 == 9.0);
Sourcepub fn from_columns<SB>(columns: &[Vector<T, R, SB>]) -> Selfwhere
SB: RawStorage<T, R>,
pub fn from_columns<SB>(columns: &[Vector<T, R, SB>]) -> Selfwhere
SB: RawStorage<T, R>,
Builds a new matrix from its columns.
Panics if not enough columns are provided (for statically-sized matrices), or if all columns do not have the same dimensions.
§Example
let m = Matrix3::from_columns(&[ Vector3::new(1.0, 2.0, 3.0), Vector3::new(4.0, 5.0, 6.0), Vector3::new(7.0, 8.0, 9.0) ]);
assert!(m.m11 == 1.0 && m.m12 == 4.0 && m.m13 == 7.0 &&
m.m21 == 2.0 && m.m22 == 5.0 && m.m23 == 8.0 &&
m.m31 == 3.0 && m.m32 == 6.0 && m.m33 == 9.0);
Sourcepub fn new_random_generic(nrows: R, ncols: C) -> Selfwhere
Standard: Distribution<T>,
pub fn new_random_generic(nrows: R, ncols: C) -> Selfwhere
Standard: Distribution<T>,
Creates a matrix filled with random values.
Sourcepub fn from_distribution_generic<Distr: Distribution<T> + ?Sized, G: Rng + ?Sized>(
nrows: R,
ncols: C,
distribution: &Distr,
rng: &mut G,
) -> Self
pub fn from_distribution_generic<Distr: Distribution<T> + ?Sized, G: Rng + ?Sized>( nrows: R, ncols: C, distribution: &Distr, rng: &mut G, ) -> Self
Creates a matrix filled with random values from the given distribution.
Sourcepub fn from_vec_generic(nrows: R, ncols: C, data: Vec<T>) -> Self
pub fn from_vec_generic(nrows: R, ncols: C, data: Vec<T>) -> Self
Creates a matrix backed by a given Vec
.
The output matrix is filled column-by-column.
§Example
let vec = vec![0, 1, 2, 3, 4, 5];
let vec_ptr = vec.as_ptr();
let matrix = Matrix::from_vec_generic(Dyn(vec.len()), Const::<1>, vec);
let matrix_storage_ptr = matrix.data.as_vec().as_ptr();
// `matrix` is backed by exactly the same `Vec` as it was constructed from.
assert_eq!(matrix_storage_ptr, vec_ptr);
Source§impl<T, D: Dim> OMatrix<T, D, D>
impl<T, D: Dim> OMatrix<T, D, D>
Sourcepub fn from_diagonal<SB: RawStorage<T, D>>(diag: &Vector<T, D, SB>) -> Selfwhere
T: Zero,
pub fn from_diagonal<SB: RawStorage<T, D>>(diag: &Vector<T, D, SB>) -> Selfwhere
T: Zero,
Creates a square matrix with its diagonal set to diag
and all other entries set to 0.
§Example
let m = Matrix3::from_diagonal(&Vector3::new(1.0, 2.0, 3.0));
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_diagonal(&DVector::from_row_slice(&[1.0, 2.0, 3.0]));
assert!(m.m11 == 1.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 2.0 && m.m23 == 0.0 &&
m.m31 == 0.0 && m.m32 == 0.0 && m.m33 == 3.0);
assert!(dm[(0, 0)] == 1.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 2.0 && dm[(1, 2)] == 0.0 &&
dm[(2, 0)] == 0.0 && dm[(2, 1)] == 0.0 && dm[(2, 2)] == 3.0);
Source§impl<T: Scalar, R: DimName, C: DimName> OMatrix<T, R, C>where
DefaultAllocator: Allocator<R, C>,
impl<T: Scalar, R: DimName, C: DimName> OMatrix<T, R, C>where
DefaultAllocator: Allocator<R, C>,
§Constructors of statically-sized vectors or statically-sized matrices
Sourcepub fn from_element(elem: T) -> Self
pub fn from_element(elem: T) -> Self
Creates a matrix or vector with all its elements set to elem
.
§Example
let v = Vector3::from_element(2.0);
// The additional argument represents the vector dimension.
let dv = DVector::from_element(3, 2.0);
let m = Matrix2x3::from_element(2.0);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_element(2, 3, 2.0);
assert!(v.x == 2.0 && v.y == 2.0 && v.z == 2.0);
assert!(dv[0] == 2.0 && dv[1] == 2.0 && dv[2] == 2.0);
assert!(m.m11 == 2.0 && m.m12 == 2.0 && m.m13 == 2.0 &&
m.m21 == 2.0 && m.m22 == 2.0 && m.m23 == 2.0);
assert!(dm[(0, 0)] == 2.0 && dm[(0, 1)] == 2.0 && dm[(0, 2)] == 2.0 &&
dm[(1, 0)] == 2.0 && dm[(1, 1)] == 2.0 && dm[(1, 2)] == 2.0);
Sourcepub fn repeat(elem: T) -> Self
pub fn repeat(elem: T) -> Self
Creates a matrix or vector with all its elements set to elem
.
Same as .from_element
.
§Example
let v = Vector3::repeat(2.0);
// The additional argument represents the vector dimension.
let dv = DVector::repeat(3, 2.0);
let m = Matrix2x3::repeat(2.0);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::repeat(2, 3, 2.0);
assert!(v.x == 2.0 && v.y == 2.0 && v.z == 2.0);
assert!(dv[0] == 2.0 && dv[1] == 2.0 && dv[2] == 2.0);
assert!(m.m11 == 2.0 && m.m12 == 2.0 && m.m13 == 2.0 &&
m.m21 == 2.0 && m.m22 == 2.0 && m.m23 == 2.0);
assert!(dm[(0, 0)] == 2.0 && dm[(0, 1)] == 2.0 && dm[(0, 2)] == 2.0 &&
dm[(1, 0)] == 2.0 && dm[(1, 1)] == 2.0 && dm[(1, 2)] == 2.0);
Sourcepub fn zeros() -> Selfwhere
T: Zero,
pub fn zeros() -> Selfwhere
T: Zero,
Creates a matrix or vector with all its elements set to 0
.
§Example
let v = Vector3::<f32>::zeros();
// The argument represents the vector dimension.
let dv = DVector::<f32>::zeros(3);
let m = Matrix2x3::<f32>::zeros();
// The two arguments represent the matrix dimensions.
let dm = DMatrix::<f32>::zeros(2, 3);
assert!(v.x == 0.0 && v.y == 0.0 && v.z == 0.0);
assert!(dv[0] == 0.0 && dv[1] == 0.0 && dv[2] == 0.0);
assert!(m.m11 == 0.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 0.0 && m.m23 == 0.0);
assert!(dm[(0, 0)] == 0.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 0.0 && dm[(1, 2)] == 0.0);
Sourcepub fn from_iterator<I>(iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
pub fn from_iterator<I>(iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
Creates a matrix or vector with all its elements filled by an iterator.
The output matrix is filled column-by-column.
§Example
let v = Vector3::from_iterator((0..3).into_iter());
// The additional argument represents the vector dimension.
let dv = DVector::from_iterator(3, (0..3).into_iter());
let m = Matrix2x3::from_iterator((0..6).into_iter());
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_iterator(2, 3, (0..6).into_iter());
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 2 && m.m13 == 4 &&
m.m21 == 1 && m.m22 == 3 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 2 && dm[(0, 2)] == 4 &&
dm[(1, 0)] == 1 && dm[(1, 1)] == 3 && dm[(1, 2)] == 5);
Sourcepub fn from_row_iterator<I>(iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
pub fn from_row_iterator<I>(iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
Creates a matrix or vector with all its elements filled by a row-major iterator.
The output matrix is filled row-by-row.
§Example
let v = Vector3::from_row_iterator((0..3).into_iter());
// The additional argument represents the vector dimension.
let dv = DVector::from_row_iterator(3, (0..3).into_iter());
let m = Matrix2x3::from_row_iterator((0..6).into_iter());
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_row_iterator(2, 3, (0..6).into_iter());
// For Vectors from_row_iterator is identical to from_iterator
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 1 && m.m13 == 2 &&
m.m21 == 3 && m.m22 == 4 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 1 && dm[(0, 2)] == 2 &&
dm[(1, 0)] == 3 && dm[(1, 1)] == 4 && dm[(1, 2)] == 5);
Sourcepub fn from_fn<F>(f: F) -> Self
pub fn from_fn<F>(f: F) -> Self
Creates a matrix or vector filled with the results of a function applied to each of its component coordinates.
§Example
let v = Vector3::from_fn(|i, _| i);
// The additional argument represents the vector dimension.
let dv = DVector::from_fn(3, |i, _| i);
let m = Matrix2x3::from_fn(|i, j| i * 3 + j);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_fn(2, 3, |i, j| i * 3 + j);
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 1 && m.m13 == 2 &&
m.m21 == 3 && m.m22 == 4 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 1 && dm[(0, 2)] == 2 &&
dm[(1, 0)] == 3 && dm[(1, 1)] == 4 && dm[(1, 2)] == 5);
Sourcepub fn identity() -> Self
pub fn identity() -> Self
Creates an identity matrix. If the matrix is not square, the largest square submatrix (starting at the first row and column) is set to the identity while all other entries are set to zero.
§Example
let m = Matrix2x3::<f32>::identity();
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::<f32>::identity(2, 3);
assert!(m.m11 == 1.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 1.0 && m.m23 == 0.0);
assert!(dm[(0, 0)] == 1.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 1.0 && dm[(1, 2)] == 0.0);
Sourcepub fn from_diagonal_element(elt: T) -> Self
pub fn from_diagonal_element(elt: T) -> Self
Creates a matrix filled with its diagonal filled with elt
and all other
components set to zero.
§Example
let m = Matrix2x3::from_diagonal_element(5.0);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_diagonal_element(2, 3, 5.0);
assert!(m.m11 == 5.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 5.0 && m.m23 == 0.0);
assert!(dm[(0, 0)] == 5.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 5.0 && dm[(1, 2)] == 0.0);
Sourcepub fn from_partial_diagonal(elts: &[T]) -> Selfwhere
T: Zero,
pub fn from_partial_diagonal(elts: &[T]) -> Selfwhere
T: Zero,
Creates a new matrix that may be rectangular. The first elts.len()
diagonal
elements are filled with the content of elts
. Others are set to 0.
Panics if elts.len()
is larger than the minimum among nrows
and ncols
.
§Example
let m = Matrix3::from_partial_diagonal(&[1.0, 2.0]);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_partial_diagonal(3, 3, &[1.0, 2.0]);
assert!(m.m11 == 1.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 2.0 && m.m23 == 0.0 &&
m.m31 == 0.0 && m.m32 == 0.0 && m.m33 == 0.0);
assert!(dm[(0, 0)] == 1.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 2.0 && dm[(1, 2)] == 0.0 &&
dm[(2, 0)] == 0.0 && dm[(2, 1)] == 0.0 && dm[(2, 2)] == 0.0);
Sourcepub fn from_distribution<Distr: Distribution<T> + ?Sized, G: Rng + ?Sized>(
distribution: &Distr,
rng: &mut G,
) -> Self
pub fn from_distribution<Distr: Distribution<T> + ?Sized, G: Rng + ?Sized>( distribution: &Distr, rng: &mut G, ) -> Self
Creates a matrix or vector filled with random values from the given distribution.
Sourcepub fn new_random() -> Selfwhere
Standard: Distribution<T>,
pub fn new_random() -> Selfwhere
Standard: Distribution<T>,
Creates a matrix filled with random values.
Source§impl<T: Scalar, R: DimName> OMatrix<T, R, Dyn>
impl<T: Scalar, R: DimName> OMatrix<T, R, Dyn>
§Constructors of matrices with a dynamic number of columns
Sourcepub fn from_element(ncols: usize, elem: T) -> Self
pub fn from_element(ncols: usize, elem: T) -> Self
Creates a matrix or vector with all its elements set to elem
.
§Example
let v = Vector3::from_element(2.0);
// The additional argument represents the vector dimension.
let dv = DVector::from_element(3, 2.0);
let m = Matrix2x3::from_element(2.0);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_element(2, 3, 2.0);
assert!(v.x == 2.0 && v.y == 2.0 && v.z == 2.0);
assert!(dv[0] == 2.0 && dv[1] == 2.0 && dv[2] == 2.0);
assert!(m.m11 == 2.0 && m.m12 == 2.0 && m.m13 == 2.0 &&
m.m21 == 2.0 && m.m22 == 2.0 && m.m23 == 2.0);
assert!(dm[(0, 0)] == 2.0 && dm[(0, 1)] == 2.0 && dm[(0, 2)] == 2.0 &&
dm[(1, 0)] == 2.0 && dm[(1, 1)] == 2.0 && dm[(1, 2)] == 2.0);
Sourcepub fn repeat(ncols: usize, elem: T) -> Self
pub fn repeat(ncols: usize, elem: T) -> Self
Creates a matrix or vector with all its elements set to elem
.
Same as .from_element
.
§Example
let v = Vector3::repeat(2.0);
// The additional argument represents the vector dimension.
let dv = DVector::repeat(3, 2.0);
let m = Matrix2x3::repeat(2.0);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::repeat(2, 3, 2.0);
assert!(v.x == 2.0 && v.y == 2.0 && v.z == 2.0);
assert!(dv[0] == 2.0 && dv[1] == 2.0 && dv[2] == 2.0);
assert!(m.m11 == 2.0 && m.m12 == 2.0 && m.m13 == 2.0 &&
m.m21 == 2.0 && m.m22 == 2.0 && m.m23 == 2.0);
assert!(dm[(0, 0)] == 2.0 && dm[(0, 1)] == 2.0 && dm[(0, 2)] == 2.0 &&
dm[(1, 0)] == 2.0 && dm[(1, 1)] == 2.0 && dm[(1, 2)] == 2.0);
Sourcepub fn zeros(ncols: usize) -> Selfwhere
T: Zero,
pub fn zeros(ncols: usize) -> Selfwhere
T: Zero,
Creates a matrix or vector with all its elements set to 0
.
§Example
let v = Vector3::<f32>::zeros();
// The argument represents the vector dimension.
let dv = DVector::<f32>::zeros(3);
let m = Matrix2x3::<f32>::zeros();
// The two arguments represent the matrix dimensions.
let dm = DMatrix::<f32>::zeros(2, 3);
assert!(v.x == 0.0 && v.y == 0.0 && v.z == 0.0);
assert!(dv[0] == 0.0 && dv[1] == 0.0 && dv[2] == 0.0);
assert!(m.m11 == 0.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 0.0 && m.m23 == 0.0);
assert!(dm[(0, 0)] == 0.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 0.0 && dm[(1, 2)] == 0.0);
Sourcepub fn from_iterator<I>(ncols: usize, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
pub fn from_iterator<I>(ncols: usize, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
Creates a matrix or vector with all its elements filled by an iterator.
The output matrix is filled column-by-column.
§Example
let v = Vector3::from_iterator((0..3).into_iter());
// The additional argument represents the vector dimension.
let dv = DVector::from_iterator(3, (0..3).into_iter());
let m = Matrix2x3::from_iterator((0..6).into_iter());
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_iterator(2, 3, (0..6).into_iter());
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 2 && m.m13 == 4 &&
m.m21 == 1 && m.m22 == 3 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 2 && dm[(0, 2)] == 4 &&
dm[(1, 0)] == 1 && dm[(1, 1)] == 3 && dm[(1, 2)] == 5);
Sourcepub fn from_row_iterator<I>(ncols: usize, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
pub fn from_row_iterator<I>(ncols: usize, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
Creates a matrix or vector with all its elements filled by a row-major iterator.
The output matrix is filled row-by-row.
§Example
let v = Vector3::from_row_iterator((0..3).into_iter());
// The additional argument represents the vector dimension.
let dv = DVector::from_row_iterator(3, (0..3).into_iter());
let m = Matrix2x3::from_row_iterator((0..6).into_iter());
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_row_iterator(2, 3, (0..6).into_iter());
// For Vectors from_row_iterator is identical to from_iterator
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 1 && m.m13 == 2 &&
m.m21 == 3 && m.m22 == 4 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 1 && dm[(0, 2)] == 2 &&
dm[(1, 0)] == 3 && dm[(1, 1)] == 4 && dm[(1, 2)] == 5);
Sourcepub fn from_fn<F>(ncols: usize, f: F) -> Self
pub fn from_fn<F>(ncols: usize, f: F) -> Self
Creates a matrix or vector filled with the results of a function applied to each of its component coordinates.
§Example
let v = Vector3::from_fn(|i, _| i);
// The additional argument represents the vector dimension.
let dv = DVector::from_fn(3, |i, _| i);
let m = Matrix2x3::from_fn(|i, j| i * 3 + j);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_fn(2, 3, |i, j| i * 3 + j);
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 1 && m.m13 == 2 &&
m.m21 == 3 && m.m22 == 4 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 1 && dm[(0, 2)] == 2 &&
dm[(1, 0)] == 3 && dm[(1, 1)] == 4 && dm[(1, 2)] == 5);
Sourcepub fn identity(ncols: usize) -> Self
pub fn identity(ncols: usize) -> Self
Creates an identity matrix. If the matrix is not square, the largest square submatrix (starting at the first row and column) is set to the identity while all other entries are set to zero.
§Example
let m = Matrix2x3::<f32>::identity();
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::<f32>::identity(2, 3);
assert!(m.m11 == 1.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 1.0 && m.m23 == 0.0);
assert!(dm[(0, 0)] == 1.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 1.0 && dm[(1, 2)] == 0.0);
Sourcepub fn from_diagonal_element(ncols: usize, elt: T) -> Self
pub fn from_diagonal_element(ncols: usize, elt: T) -> Self
Creates a matrix filled with its diagonal filled with elt
and all other
components set to zero.
§Example
let m = Matrix2x3::from_diagonal_element(5.0);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_diagonal_element(2, 3, 5.0);
assert!(m.m11 == 5.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 5.0 && m.m23 == 0.0);
assert!(dm[(0, 0)] == 5.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 5.0 && dm[(1, 2)] == 0.0);
Sourcepub fn from_partial_diagonal(ncols: usize, elts: &[T]) -> Selfwhere
T: Zero,
pub fn from_partial_diagonal(ncols: usize, elts: &[T]) -> Selfwhere
T: Zero,
Creates a new matrix that may be rectangular. The first elts.len()
diagonal
elements are filled with the content of elts
. Others are set to 0.
Panics if elts.len()
is larger than the minimum among nrows
and ncols
.
§Example
let m = Matrix3::from_partial_diagonal(&[1.0, 2.0]);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_partial_diagonal(3, 3, &[1.0, 2.0]);
assert!(m.m11 == 1.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 2.0 && m.m23 == 0.0 &&
m.m31 == 0.0 && m.m32 == 0.0 && m.m33 == 0.0);
assert!(dm[(0, 0)] == 1.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 2.0 && dm[(1, 2)] == 0.0 &&
dm[(2, 0)] == 0.0 && dm[(2, 1)] == 0.0 && dm[(2, 2)] == 0.0);
Sourcepub fn from_distribution<Distr: Distribution<T> + ?Sized, G: Rng + ?Sized>(
ncols: usize,
distribution: &Distr,
rng: &mut G,
) -> Self
pub fn from_distribution<Distr: Distribution<T> + ?Sized, G: Rng + ?Sized>( ncols: usize, distribution: &Distr, rng: &mut G, ) -> Self
Creates a matrix or vector filled with random values from the given distribution.
Sourcepub fn new_random(ncols: usize) -> Selfwhere
Standard: Distribution<T>,
pub fn new_random(ncols: usize) -> Selfwhere
Standard: Distribution<T>,
Creates a matrix filled with random values.
Source§impl<T: Scalar, C: DimName> OMatrix<T, Dyn, C>
impl<T: Scalar, C: DimName> OMatrix<T, Dyn, C>
§Constructors of dynamic vectors and matrices with a dynamic number of rows
Sourcepub fn from_element(nrows: usize, elem: T) -> Self
pub fn from_element(nrows: usize, elem: T) -> Self
Creates a matrix or vector with all its elements set to elem
.
§Example
let v = Vector3::from_element(2.0);
// The additional argument represents the vector dimension.
let dv = DVector::from_element(3, 2.0);
let m = Matrix2x3::from_element(2.0);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_element(2, 3, 2.0);
assert!(v.x == 2.0 && v.y == 2.0 && v.z == 2.0);
assert!(dv[0] == 2.0 && dv[1] == 2.0 && dv[2] == 2.0);
assert!(m.m11 == 2.0 && m.m12 == 2.0 && m.m13 == 2.0 &&
m.m21 == 2.0 && m.m22 == 2.0 && m.m23 == 2.0);
assert!(dm[(0, 0)] == 2.0 && dm[(0, 1)] == 2.0 && dm[(0, 2)] == 2.0 &&
dm[(1, 0)] == 2.0 && dm[(1, 1)] == 2.0 && dm[(1, 2)] == 2.0);
Sourcepub fn repeat(nrows: usize, elem: T) -> Self
pub fn repeat(nrows: usize, elem: T) -> Self
Creates a matrix or vector with all its elements set to elem
.
Same as .from_element
.
§Example
let v = Vector3::repeat(2.0);
// The additional argument represents the vector dimension.
let dv = DVector::repeat(3, 2.0);
let m = Matrix2x3::repeat(2.0);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::repeat(2, 3, 2.0);
assert!(v.x == 2.0 && v.y == 2.0 && v.z == 2.0);
assert!(dv[0] == 2.0 && dv[1] == 2.0 && dv[2] == 2.0);
assert!(m.m11 == 2.0 && m.m12 == 2.0 && m.m13 == 2.0 &&
m.m21 == 2.0 && m.m22 == 2.0 && m.m23 == 2.0);
assert!(dm[(0, 0)] == 2.0 && dm[(0, 1)] == 2.0 && dm[(0, 2)] == 2.0 &&
dm[(1, 0)] == 2.0 && dm[(1, 1)] == 2.0 && dm[(1, 2)] == 2.0);
Sourcepub fn zeros(nrows: usize) -> Selfwhere
T: Zero,
pub fn zeros(nrows: usize) -> Selfwhere
T: Zero,
Creates a matrix or vector with all its elements set to 0
.
§Example
let v = Vector3::<f32>::zeros();
// The argument represents the vector dimension.
let dv = DVector::<f32>::zeros(3);
let m = Matrix2x3::<f32>::zeros();
// The two arguments represent the matrix dimensions.
let dm = DMatrix::<f32>::zeros(2, 3);
assert!(v.x == 0.0 && v.y == 0.0 && v.z == 0.0);
assert!(dv[0] == 0.0 && dv[1] == 0.0 && dv[2] == 0.0);
assert!(m.m11 == 0.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 0.0 && m.m23 == 0.0);
assert!(dm[(0, 0)] == 0.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 0.0 && dm[(1, 2)] == 0.0);
Sourcepub fn from_iterator<I>(nrows: usize, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
pub fn from_iterator<I>(nrows: usize, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
Creates a matrix or vector with all its elements filled by an iterator.
The output matrix is filled column-by-column.
§Example
let v = Vector3::from_iterator((0..3).into_iter());
// The additional argument represents the vector dimension.
let dv = DVector::from_iterator(3, (0..3).into_iter());
let m = Matrix2x3::from_iterator((0..6).into_iter());
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_iterator(2, 3, (0..6).into_iter());
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 2 && m.m13 == 4 &&
m.m21 == 1 && m.m22 == 3 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 2 && dm[(0, 2)] == 4 &&
dm[(1, 0)] == 1 && dm[(1, 1)] == 3 && dm[(1, 2)] == 5);
Sourcepub fn from_row_iterator<I>(nrows: usize, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
pub fn from_row_iterator<I>(nrows: usize, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
Creates a matrix or vector with all its elements filled by a row-major iterator.
The output matrix is filled row-by-row.
§Example
let v = Vector3::from_row_iterator((0..3).into_iter());
// The additional argument represents the vector dimension.
let dv = DVector::from_row_iterator(3, (0..3).into_iter());
let m = Matrix2x3::from_row_iterator((0..6).into_iter());
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_row_iterator(2, 3, (0..6).into_iter());
// For Vectors from_row_iterator is identical to from_iterator
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 1 && m.m13 == 2 &&
m.m21 == 3 && m.m22 == 4 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 1 && dm[(0, 2)] == 2 &&
dm[(1, 0)] == 3 && dm[(1, 1)] == 4 && dm[(1, 2)] == 5);
Sourcepub fn from_fn<F>(nrows: usize, f: F) -> Self
pub fn from_fn<F>(nrows: usize, f: F) -> Self
Creates a matrix or vector filled with the results of a function applied to each of its component coordinates.
§Example
let v = Vector3::from_fn(|i, _| i);
// The additional argument represents the vector dimension.
let dv = DVector::from_fn(3, |i, _| i);
let m = Matrix2x3::from_fn(|i, j| i * 3 + j);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_fn(2, 3, |i, j| i * 3 + j);
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 1 && m.m13 == 2 &&
m.m21 == 3 && m.m22 == 4 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 1 && dm[(0, 2)] == 2 &&
dm[(1, 0)] == 3 && dm[(1, 1)] == 4 && dm[(1, 2)] == 5);
Sourcepub fn identity(nrows: usize) -> Self
pub fn identity(nrows: usize) -> Self
Creates an identity matrix. If the matrix is not square, the largest square submatrix (starting at the first row and column) is set to the identity while all other entries are set to zero.
§Example
let m = Matrix2x3::<f32>::identity();
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::<f32>::identity(2, 3);
assert!(m.m11 == 1.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 1.0 && m.m23 == 0.0);
assert!(dm[(0, 0)] == 1.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 1.0 && dm[(1, 2)] == 0.0);
Sourcepub fn from_diagonal_element(nrows: usize, elt: T) -> Self
pub fn from_diagonal_element(nrows: usize, elt: T) -> Self
Creates a matrix filled with its diagonal filled with elt
and all other
components set to zero.
§Example
let m = Matrix2x3::from_diagonal_element(5.0);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_diagonal_element(2, 3, 5.0);
assert!(m.m11 == 5.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 5.0 && m.m23 == 0.0);
assert!(dm[(0, 0)] == 5.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 5.0 && dm[(1, 2)] == 0.0);
Sourcepub fn from_partial_diagonal(nrows: usize, elts: &[T]) -> Selfwhere
T: Zero,
pub fn from_partial_diagonal(nrows: usize, elts: &[T]) -> Selfwhere
T: Zero,
Creates a new matrix that may be rectangular. The first elts.len()
diagonal
elements are filled with the content of elts
. Others are set to 0.
Panics if elts.len()
is larger than the minimum among nrows
and ncols
.
§Example
let m = Matrix3::from_partial_diagonal(&[1.0, 2.0]);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_partial_diagonal(3, 3, &[1.0, 2.0]);
assert!(m.m11 == 1.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 2.0 && m.m23 == 0.0 &&
m.m31 == 0.0 && m.m32 == 0.0 && m.m33 == 0.0);
assert!(dm[(0, 0)] == 1.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 2.0 && dm[(1, 2)] == 0.0 &&
dm[(2, 0)] == 0.0 && dm[(2, 1)] == 0.0 && dm[(2, 2)] == 0.0);
Sourcepub fn from_distribution<Distr: Distribution<T> + ?Sized, G: Rng + ?Sized>(
nrows: usize,
distribution: &Distr,
rng: &mut G,
) -> Self
pub fn from_distribution<Distr: Distribution<T> + ?Sized, G: Rng + ?Sized>( nrows: usize, distribution: &Distr, rng: &mut G, ) -> Self
Creates a matrix or vector filled with random values from the given distribution.
Sourcepub fn new_random(nrows: usize) -> Selfwhere
Standard: Distribution<T>,
pub fn new_random(nrows: usize) -> Selfwhere
Standard: Distribution<T>,
Creates a matrix filled with random values.
Source§impl<T: Scalar> OMatrix<T, Dyn, Dyn>
impl<T: Scalar> OMatrix<T, Dyn, Dyn>
§Constructors of fully dynamic matrices
Sourcepub fn from_element(nrows: usize, ncols: usize, elem: T) -> Self
pub fn from_element(nrows: usize, ncols: usize, elem: T) -> Self
Creates a matrix or vector with all its elements set to elem
.
§Example
let v = Vector3::from_element(2.0);
// The additional argument represents the vector dimension.
let dv = DVector::from_element(3, 2.0);
let m = Matrix2x3::from_element(2.0);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_element(2, 3, 2.0);
assert!(v.x == 2.0 && v.y == 2.0 && v.z == 2.0);
assert!(dv[0] == 2.0 && dv[1] == 2.0 && dv[2] == 2.0);
assert!(m.m11 == 2.0 && m.m12 == 2.0 && m.m13 == 2.0 &&
m.m21 == 2.0 && m.m22 == 2.0 && m.m23 == 2.0);
assert!(dm[(0, 0)] == 2.0 && dm[(0, 1)] == 2.0 && dm[(0, 2)] == 2.0 &&
dm[(1, 0)] == 2.0 && dm[(1, 1)] == 2.0 && dm[(1, 2)] == 2.0);
Sourcepub fn repeat(nrows: usize, ncols: usize, elem: T) -> Self
pub fn repeat(nrows: usize, ncols: usize, elem: T) -> Self
Creates a matrix or vector with all its elements set to elem
.
Same as .from_element
.
§Example
let v = Vector3::repeat(2.0);
// The additional argument represents the vector dimension.
let dv = DVector::repeat(3, 2.0);
let m = Matrix2x3::repeat(2.0);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::repeat(2, 3, 2.0);
assert!(v.x == 2.0 && v.y == 2.0 && v.z == 2.0);
assert!(dv[0] == 2.0 && dv[1] == 2.0 && dv[2] == 2.0);
assert!(m.m11 == 2.0 && m.m12 == 2.0 && m.m13 == 2.0 &&
m.m21 == 2.0 && m.m22 == 2.0 && m.m23 == 2.0);
assert!(dm[(0, 0)] == 2.0 && dm[(0, 1)] == 2.0 && dm[(0, 2)] == 2.0 &&
dm[(1, 0)] == 2.0 && dm[(1, 1)] == 2.0 && dm[(1, 2)] == 2.0);
Sourcepub fn zeros(nrows: usize, ncols: usize) -> Selfwhere
T: Zero,
pub fn zeros(nrows: usize, ncols: usize) -> Selfwhere
T: Zero,
Creates a matrix or vector with all its elements set to 0
.
§Example
let v = Vector3::<f32>::zeros();
// The argument represents the vector dimension.
let dv = DVector::<f32>::zeros(3);
let m = Matrix2x3::<f32>::zeros();
// The two arguments represent the matrix dimensions.
let dm = DMatrix::<f32>::zeros(2, 3);
assert!(v.x == 0.0 && v.y == 0.0 && v.z == 0.0);
assert!(dv[0] == 0.0 && dv[1] == 0.0 && dv[2] == 0.0);
assert!(m.m11 == 0.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 0.0 && m.m23 == 0.0);
assert!(dm[(0, 0)] == 0.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 0.0 && dm[(1, 2)] == 0.0);
Sourcepub fn from_iterator<I>(nrows: usize, ncols: usize, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
pub fn from_iterator<I>(nrows: usize, ncols: usize, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
Creates a matrix or vector with all its elements filled by an iterator.
The output matrix is filled column-by-column.
§Example
let v = Vector3::from_iterator((0..3).into_iter());
// The additional argument represents the vector dimension.
let dv = DVector::from_iterator(3, (0..3).into_iter());
let m = Matrix2x3::from_iterator((0..6).into_iter());
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_iterator(2, 3, (0..6).into_iter());
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 2 && m.m13 == 4 &&
m.m21 == 1 && m.m22 == 3 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 2 && dm[(0, 2)] == 4 &&
dm[(1, 0)] == 1 && dm[(1, 1)] == 3 && dm[(1, 2)] == 5);
Sourcepub fn from_row_iterator<I>(nrows: usize, ncols: usize, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
pub fn from_row_iterator<I>(nrows: usize, ncols: usize, iter: I) -> Selfwhere
I: IntoIterator<Item = T>,
Creates a matrix or vector with all its elements filled by a row-major iterator.
The output matrix is filled row-by-row.
§Example
let v = Vector3::from_row_iterator((0..3).into_iter());
// The additional argument represents the vector dimension.
let dv = DVector::from_row_iterator(3, (0..3).into_iter());
let m = Matrix2x3::from_row_iterator((0..6).into_iter());
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_row_iterator(2, 3, (0..6).into_iter());
// For Vectors from_row_iterator is identical to from_iterator
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 1 && m.m13 == 2 &&
m.m21 == 3 && m.m22 == 4 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 1 && dm[(0, 2)] == 2 &&
dm[(1, 0)] == 3 && dm[(1, 1)] == 4 && dm[(1, 2)] == 5);
Sourcepub fn from_fn<F>(nrows: usize, ncols: usize, f: F) -> Self
pub fn from_fn<F>(nrows: usize, ncols: usize, f: F) -> Self
Creates a matrix or vector filled with the results of a function applied to each of its component coordinates.
§Example
let v = Vector3::from_fn(|i, _| i);
// The additional argument represents the vector dimension.
let dv = DVector::from_fn(3, |i, _| i);
let m = Matrix2x3::from_fn(|i, j| i * 3 + j);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_fn(2, 3, |i, j| i * 3 + j);
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 1 && m.m13 == 2 &&
m.m21 == 3 && m.m22 == 4 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 1 && dm[(0, 2)] == 2 &&
dm[(1, 0)] == 3 && dm[(1, 1)] == 4 && dm[(1, 2)] == 5);
Sourcepub fn identity(nrows: usize, ncols: usize) -> Self
pub fn identity(nrows: usize, ncols: usize) -> Self
Creates an identity matrix. If the matrix is not square, the largest square submatrix (starting at the first row and column) is set to the identity while all other entries are set to zero.
§Example
let m = Matrix2x3::<f32>::identity();
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::<f32>::identity(2, 3);
assert!(m.m11 == 1.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 1.0 && m.m23 == 0.0);
assert!(dm[(0, 0)] == 1.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 1.0 && dm[(1, 2)] == 0.0);
Sourcepub fn from_diagonal_element(nrows: usize, ncols: usize, elt: T) -> Self
pub fn from_diagonal_element(nrows: usize, ncols: usize, elt: T) -> Self
Creates a matrix filled with its diagonal filled with elt
and all other
components set to zero.
§Example
let m = Matrix2x3::from_diagonal_element(5.0);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_diagonal_element(2, 3, 5.0);
assert!(m.m11 == 5.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 5.0 && m.m23 == 0.0);
assert!(dm[(0, 0)] == 5.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 5.0 && dm[(1, 2)] == 0.0);
Sourcepub fn from_partial_diagonal(nrows: usize, ncols: usize, elts: &[T]) -> Selfwhere
T: Zero,
pub fn from_partial_diagonal(nrows: usize, ncols: usize, elts: &[T]) -> Selfwhere
T: Zero,
Creates a new matrix that may be rectangular. The first elts.len()
diagonal
elements are filled with the content of elts
. Others are set to 0.
Panics if elts.len()
is larger than the minimum among nrows
and ncols
.
§Example
let m = Matrix3::from_partial_diagonal(&[1.0, 2.0]);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_partial_diagonal(3, 3, &[1.0, 2.0]);
assert!(m.m11 == 1.0 && m.m12 == 0.0 && m.m13 == 0.0 &&
m.m21 == 0.0 && m.m22 == 2.0 && m.m23 == 0.0 &&
m.m31 == 0.0 && m.m32 == 0.0 && m.m33 == 0.0);
assert!(dm[(0, 0)] == 1.0 && dm[(0, 1)] == 0.0 && dm[(0, 2)] == 0.0 &&
dm[(1, 0)] == 0.0 && dm[(1, 1)] == 2.0 && dm[(1, 2)] == 0.0 &&
dm[(2, 0)] == 0.0 && dm[(2, 1)] == 0.0 && dm[(2, 2)] == 0.0);
Sourcepub fn from_distribution<Distr: Distribution<T> + ?Sized, G: Rng + ?Sized>(
nrows: usize,
ncols: usize,
distribution: &Distr,
rng: &mut G,
) -> Self
pub fn from_distribution<Distr: Distribution<T> + ?Sized, G: Rng + ?Sized>( nrows: usize, ncols: usize, distribution: &Distr, rng: &mut G, ) -> Self
Creates a matrix or vector filled with random values from the given distribution.
Sourcepub fn new_random(nrows: usize, ncols: usize) -> Selfwhere
Standard: Distribution<T>,
pub fn new_random(nrows: usize, ncols: usize) -> Selfwhere
Standard: Distribution<T>,
Creates a matrix filled with random values.
Source§impl<T: Scalar, R: DimName, C: DimName> OMatrix<T, R, C>where
DefaultAllocator: Allocator<R, C>,
impl<T: Scalar, R: DimName, C: DimName> OMatrix<T, R, C>where
DefaultAllocator: Allocator<R, C>,
Sourcepub fn from_row_slice(data: &[T]) -> Self
pub fn from_row_slice(data: &[T]) -> Self
Creates a matrix with its elements filled with the components provided by a slice in row-major order.
The order of elements in the slice must follow the usual mathematic writing, i.e., row-by-row.
§Example
let v = Vector3::from_row_slice(&[0, 1, 2]);
// The additional argument represents the vector dimension.
let dv = DVector::from_row_slice(&[0, 1, 2]);
let m = Matrix2x3::from_row_slice(&[0, 1, 2, 3, 4, 5]);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_row_slice(2, 3, &[0, 1, 2, 3, 4, 5]);
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 1 && m.m13 == 2 &&
m.m21 == 3 && m.m22 == 4 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 1 && dm[(0, 2)] == 2 &&
dm[(1, 0)] == 3 && dm[(1, 1)] == 4 && dm[(1, 2)] == 5);
Sourcepub fn from_column_slice(data: &[T]) -> Self
pub fn from_column_slice(data: &[T]) -> Self
Creates a matrix with its elements filled with the components provided by a slice in column-major order.
§Example
let v = Vector3::from_column_slice(&[0, 1, 2]);
// The additional argument represents the vector dimension.
let dv = DVector::from_column_slice(&[0, 1, 2]);
let m = Matrix2x3::from_column_slice(&[0, 1, 2, 3, 4, 5]);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_column_slice(2, 3, &[0, 1, 2, 3, 4, 5]);
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 2 && m.m13 == 4 &&
m.m21 == 1 && m.m22 == 3 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 2 && dm[(0, 2)] == 4 &&
dm[(1, 0)] == 1 && dm[(1, 1)] == 3 && dm[(1, 2)] == 5);
Sourcepub fn from_vec(data: Vec<T>) -> Self
pub fn from_vec(data: Vec<T>) -> Self
Creates a matrix backed by a given Vec
.
The output matrix is filled column-by-column.
§Example
let m = Matrix2x3::from_vec(vec![0, 1, 2, 3, 4, 5]);
assert!(m.m11 == 0 && m.m12 == 2 && m.m13 == 4 &&
m.m21 == 1 && m.m22 == 3 && m.m23 == 5);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_vec(2, 3, vec![0, 1, 2, 3, 4, 5]);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 2 && dm[(0, 2)] == 4 &&
dm[(1, 0)] == 1 && dm[(1, 1)] == 3 && dm[(1, 2)] == 5);
Source§impl<T: Scalar, R: DimName> OMatrix<T, R, Dyn>
impl<T: Scalar, R: DimName> OMatrix<T, R, Dyn>
Sourcepub fn from_row_slice(data: &[T]) -> Self
pub fn from_row_slice(data: &[T]) -> Self
Creates a matrix with its elements filled with the components provided by a slice in row-major order.
The order of elements in the slice must follow the usual mathematic writing, i.e., row-by-row.
§Example
let v = Vector3::from_row_slice(&[0, 1, 2]);
// The additional argument represents the vector dimension.
let dv = DVector::from_row_slice(&[0, 1, 2]);
let m = Matrix2x3::from_row_slice(&[0, 1, 2, 3, 4, 5]);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_row_slice(2, 3, &[0, 1, 2, 3, 4, 5]);
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 1 && m.m13 == 2 &&
m.m21 == 3 && m.m22 == 4 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 1 && dm[(0, 2)] == 2 &&
dm[(1, 0)] == 3 && dm[(1, 1)] == 4 && dm[(1, 2)] == 5);
Sourcepub fn from_column_slice(data: &[T]) -> Self
pub fn from_column_slice(data: &[T]) -> Self
Creates a matrix with its elements filled with the components provided by a slice in column-major order.
§Example
let v = Vector3::from_column_slice(&[0, 1, 2]);
// The additional argument represents the vector dimension.
let dv = DVector::from_column_slice(&[0, 1, 2]);
let m = Matrix2x3::from_column_slice(&[0, 1, 2, 3, 4, 5]);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_column_slice(2, 3, &[0, 1, 2, 3, 4, 5]);
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 2 && m.m13 == 4 &&
m.m21 == 1 && m.m22 == 3 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 2 && dm[(0, 2)] == 4 &&
dm[(1, 0)] == 1 && dm[(1, 1)] == 3 && dm[(1, 2)] == 5);
Sourcepub fn from_vec(data: Vec<T>) -> Self
pub fn from_vec(data: Vec<T>) -> Self
Creates a matrix backed by a given Vec
.
The output matrix is filled column-by-column.
§Example
let m = Matrix2x3::from_vec(vec![0, 1, 2, 3, 4, 5]);
assert!(m.m11 == 0 && m.m12 == 2 && m.m13 == 4 &&
m.m21 == 1 && m.m22 == 3 && m.m23 == 5);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_vec(2, 3, vec![0, 1, 2, 3, 4, 5]);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 2 && dm[(0, 2)] == 4 &&
dm[(1, 0)] == 1 && dm[(1, 1)] == 3 && dm[(1, 2)] == 5);
Source§impl<T: Scalar, C: DimName> OMatrix<T, Dyn, C>
impl<T: Scalar, C: DimName> OMatrix<T, Dyn, C>
Sourcepub fn from_row_slice(data: &[T]) -> Self
pub fn from_row_slice(data: &[T]) -> Self
Creates a matrix with its elements filled with the components provided by a slice in row-major order.
The order of elements in the slice must follow the usual mathematic writing, i.e., row-by-row.
§Example
let v = Vector3::from_row_slice(&[0, 1, 2]);
// The additional argument represents the vector dimension.
let dv = DVector::from_row_slice(&[0, 1, 2]);
let m = Matrix2x3::from_row_slice(&[0, 1, 2, 3, 4, 5]);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_row_slice(2, 3, &[0, 1, 2, 3, 4, 5]);
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 1 && m.m13 == 2 &&
m.m21 == 3 && m.m22 == 4 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 1 && dm[(0, 2)] == 2 &&
dm[(1, 0)] == 3 && dm[(1, 1)] == 4 && dm[(1, 2)] == 5);
Sourcepub fn from_column_slice(data: &[T]) -> Self
pub fn from_column_slice(data: &[T]) -> Self
Creates a matrix with its elements filled with the components provided by a slice in column-major order.
§Example
let v = Vector3::from_column_slice(&[0, 1, 2]);
// The additional argument represents the vector dimension.
let dv = DVector::from_column_slice(&[0, 1, 2]);
let m = Matrix2x3::from_column_slice(&[0, 1, 2, 3, 4, 5]);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_column_slice(2, 3, &[0, 1, 2, 3, 4, 5]);
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 2 && m.m13 == 4 &&
m.m21 == 1 && m.m22 == 3 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 2 && dm[(0, 2)] == 4 &&
dm[(1, 0)] == 1 && dm[(1, 1)] == 3 && dm[(1, 2)] == 5);
Sourcepub fn from_vec(data: Vec<T>) -> Self
pub fn from_vec(data: Vec<T>) -> Self
Creates a matrix backed by a given Vec
.
The output matrix is filled column-by-column.
§Example
let m = Matrix2x3::from_vec(vec![0, 1, 2, 3, 4, 5]);
assert!(m.m11 == 0 && m.m12 == 2 && m.m13 == 4 &&
m.m21 == 1 && m.m22 == 3 && m.m23 == 5);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_vec(2, 3, vec![0, 1, 2, 3, 4, 5]);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 2 && dm[(0, 2)] == 4 &&
dm[(1, 0)] == 1 && dm[(1, 1)] == 3 && dm[(1, 2)] == 5);
Source§impl<T: Scalar> OMatrix<T, Dyn, Dyn>
impl<T: Scalar> OMatrix<T, Dyn, Dyn>
Sourcepub fn from_row_slice(nrows: usize, ncols: usize, data: &[T]) -> Self
pub fn from_row_slice(nrows: usize, ncols: usize, data: &[T]) -> Self
Creates a matrix with its elements filled with the components provided by a slice in row-major order.
The order of elements in the slice must follow the usual mathematic writing, i.e., row-by-row.
§Example
let v = Vector3::from_row_slice(&[0, 1, 2]);
// The additional argument represents the vector dimension.
let dv = DVector::from_row_slice(&[0, 1, 2]);
let m = Matrix2x3::from_row_slice(&[0, 1, 2, 3, 4, 5]);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_row_slice(2, 3, &[0, 1, 2, 3, 4, 5]);
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 1 && m.m13 == 2 &&
m.m21 == 3 && m.m22 == 4 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 1 && dm[(0, 2)] == 2 &&
dm[(1, 0)] == 3 && dm[(1, 1)] == 4 && dm[(1, 2)] == 5);
Sourcepub fn from_column_slice(nrows: usize, ncols: usize, data: &[T]) -> Self
pub fn from_column_slice(nrows: usize, ncols: usize, data: &[T]) -> Self
Creates a matrix with its elements filled with the components provided by a slice in column-major order.
§Example
let v = Vector3::from_column_slice(&[0, 1, 2]);
// The additional argument represents the vector dimension.
let dv = DVector::from_column_slice(&[0, 1, 2]);
let m = Matrix2x3::from_column_slice(&[0, 1, 2, 3, 4, 5]);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_column_slice(2, 3, &[0, 1, 2, 3, 4, 5]);
assert!(v.x == 0 && v.y == 1 && v.z == 2);
assert!(dv[0] == 0 && dv[1] == 1 && dv[2] == 2);
assert!(m.m11 == 0 && m.m12 == 2 && m.m13 == 4 &&
m.m21 == 1 && m.m22 == 3 && m.m23 == 5);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 2 && dm[(0, 2)] == 4 &&
dm[(1, 0)] == 1 && dm[(1, 1)] == 3 && dm[(1, 2)] == 5);
Sourcepub fn from_vec(nrows: usize, ncols: usize, data: Vec<T>) -> Self
pub fn from_vec(nrows: usize, ncols: usize, data: Vec<T>) -> Self
Creates a matrix backed by a given Vec
.
The output matrix is filled column-by-column.
§Example
let m = Matrix2x3::from_vec(vec![0, 1, 2, 3, 4, 5]);
assert!(m.m11 == 0 && m.m12 == 2 && m.m13 == 4 &&
m.m21 == 1 && m.m22 == 3 && m.m23 == 5);
// The two additional arguments represent the matrix dimensions.
let dm = DMatrix::from_vec(2, 3, vec![0, 1, 2, 3, 4, 5]);
assert!(dm[(0, 0)] == 0 && dm[(0, 1)] == 2 && dm[(0, 2)] == 4 &&
dm[(1, 0)] == 1 && dm[(1, 1)] == 3 && dm[(1, 2)] == 5);
Source§impl<T: Scalar> OMatrix<T, Dyn, Dyn>
impl<T: Scalar> OMatrix<T, Dyn, Dyn>
§In-place resizing
Sourcepub fn resize_mut(&mut self, new_nrows: usize, new_ncols: usize, val: T)
pub fn resize_mut(&mut self, new_nrows: usize, new_ncols: usize, val: T)
Resizes this matrix in-place.
The values are copied such that self[(i, j)] == result[(i, j)]
. If the result has more
rows and/or columns than self
, then the extra rows or columns are filled with val
.
Defined only for owned fully-dynamic matrices, i.e., DMatrix
.
Source§impl<T: Scalar, C: Dim> OMatrix<T, Dyn, C>
impl<T: Scalar, C: Dim> OMatrix<T, Dyn, C>
Sourcepub fn resize_vertically_mut(&mut self, new_nrows: usize, val: T)
pub fn resize_vertically_mut(&mut self, new_nrows: usize, val: T)
Changes the number of rows of this matrix in-place.
The values are copied such that self[(i, j)] == result[(i, j)]
. If the result has more
rows than self
, then the extra rows are filled with val
.
Defined only for owned matrices with a dynamic number of rows (for example, DVector
).
Source§impl<T: Scalar, R: Dim> OMatrix<T, R, Dyn>
impl<T: Scalar, R: Dim> OMatrix<T, R, Dyn>
Sourcepub fn resize_horizontally_mut(&mut self, new_ncols: usize, val: T)
pub fn resize_horizontally_mut(&mut self, new_ncols: usize, val: T)
Changes the number of column of this matrix in-place.
The values are copied such that self[(i, j)] == result[(i, j)]
. If the result has more
columns than self
, then the extra columns are filled with val
.
Defined only for owned matrices with a dynamic number of columns (for example, DVector
).
Source§impl<T: ComplexField, D> OMatrix<T, D, D>where
D: DimMin<D, Output = D>,
DefaultAllocator: Allocator<D, D> + Allocator<DimMinimum<D, D>> + Allocator<D>,
impl<T: ComplexField, D> OMatrix<T, D, D>where
D: DimMin<D, Output = D>,
DefaultAllocator: Allocator<D, D> + Allocator<DimMinimum<D, D>> + Allocator<D>,
Trait Implementations§
Source§impl<T, R: DimName, C: DimName> AbstractGroupAbelian<Additive> for OMatrix<T, R, C>where
T: Scalar + AbstractGroupAbelian<Additive> + Zero + ClosedAdd + ClosedNeg,
DefaultAllocator: Allocator<R, C>,
impl<T, R: DimName, C: DimName> AbstractGroupAbelian<Additive> for OMatrix<T, R, C>where
T: Scalar + AbstractGroupAbelian<Additive> + Zero + ClosedAdd + ClosedNeg,
DefaultAllocator: Allocator<R, C>,
Source§fn prop_is_commutative(args: (Self, Self)) -> boolwhere
Self: Eq,
fn prop_is_commutative(args: (Self, Self)) -> boolwhere
Self: Eq,
true
if the operator is commutative for the given argument tuple.Source§impl<T, D: DimName> AbstractMagma<Multiplicative> for OMatrix<T, D, D>
impl<T, D: DimName> AbstractMagma<Multiplicative> for OMatrix<T, D, D>
Source§impl<T, R: DimName, C: DimName> AbstractModule for OMatrix<T, R, C>
impl<T, R: DimName, C: DimName> AbstractModule for OMatrix<T, R, C>
Source§type AbstractRing = T
type AbstractRing = T
Source§fn multiply_by(&self, n: T) -> Self
fn multiply_by(&self, n: T) -> Self
Source§impl<T, R: DimName, C: DimName> AbstractMonoid<Additive> for OMatrix<T, R, C>
impl<T, R: DimName, C: DimName> AbstractMonoid<Additive> for OMatrix<T, R, C>
Source§fn prop_operating_identity_element_is_noop(args: (Self,)) -> boolwhere
Self: Eq,
fn prop_operating_identity_element_is_noop(args: (Self,)) -> boolwhere
Self: Eq,
Source§impl<T, D: DimName> AbstractMonoid<Multiplicative> for OMatrix<T, D, D>where
T: Scalar + Zero + One + ClosedAdd + ClosedMul + AbstractMonoid<Multiplicative>,
DefaultAllocator: Allocator<D, D>,
impl<T, D: DimName> AbstractMonoid<Multiplicative> for OMatrix<T, D, D>where
T: Scalar + Zero + One + ClosedAdd + ClosedMul + AbstractMonoid<Multiplicative>,
DefaultAllocator: Allocator<D, D>,
Source§fn prop_operating_identity_element_is_noop(args: (Self,)) -> boolwhere
Self: Eq,
fn prop_operating_identity_element_is_noop(args: (Self,)) -> boolwhere
Self: Eq,
Source§impl<T, R: DimName, C: DimName> AbstractQuasigroup<Additive> for OMatrix<T, R, C>where
T: Scalar + AbstractQuasigroup<Additive> + ClosedAdd + ClosedNeg,
DefaultAllocator: Allocator<R, C>,
impl<T, R: DimName, C: DimName> AbstractQuasigroup<Additive> for OMatrix<T, R, C>where
T: Scalar + AbstractQuasigroup<Additive> + ClosedAdd + ClosedNeg,
DefaultAllocator: Allocator<R, C>,
Source§impl<T, R: DimName, C: DimName> AbstractSemigroup<Additive> for OMatrix<T, R, C>
impl<T, R: DimName, C: DimName> AbstractSemigroup<Additive> for OMatrix<T, R, C>
Source§fn prop_is_associative(args: (Self, Self, Self)) -> boolwhere
Self: Eq,
fn prop_is_associative(args: (Self, Self, Self)) -> boolwhere
Self: Eq,
true
if associativity holds for the given arguments.Source§impl<T, D: DimName> AbstractSemigroup<Multiplicative> for OMatrix<T, D, D>where
T: Scalar + Zero + One + ClosedAdd + ClosedMul + AbstractSemigroup<Multiplicative>,
DefaultAllocator: Allocator<D, D>,
impl<T, D: DimName> AbstractSemigroup<Multiplicative> for OMatrix<T, D, D>where
T: Scalar + Zero + One + ClosedAdd + ClosedMul + AbstractSemigroup<Multiplicative>,
DefaultAllocator: Allocator<D, D>,
Source§fn prop_is_associative(args: (Self, Self, Self)) -> boolwhere
Self: Eq,
fn prop_is_associative(args: (Self, Self, Self)) -> boolwhere
Self: Eq,
true
if associativity holds for the given arguments.Source§impl<T, R, C> Arbitrary for OMatrix<T, R, C>where
T: Scalar + Arbitrary,
<T as Arbitrary>::Strategy: Clone,
R: Dim,
C: Dim,
MatrixParameters<T::Parameters, R, C>: Default,
DefaultAllocator: Allocator<R, C>,
impl<T, R, C> Arbitrary for OMatrix<T, R, C>where
T: Scalar + Arbitrary,
<T as Arbitrary>::Strategy: Clone,
R: Dim,
C: Dim,
MatrixParameters<T::Parameters, R, C>: Default,
DefaultAllocator: Allocator<R, C>,
Source§type Parameters = MatrixParameters<<T as Arbitrary>::Parameters, R, C>
type Parameters = MatrixParameters<<T as Arbitrary>::Parameters, R, C>
arbitrary_with
accepts for configuration
of the generated Strategy
. Parameters must implement Default
.Source§type Strategy = MatrixStrategy<<T as Arbitrary>::Strategy, R, C>
type Strategy = MatrixStrategy<<T as Arbitrary>::Strategy, R, C>
Strategy
used to generate values of type Self
.Source§fn arbitrary_with(args: Self::Parameters) -> Self::Strategy
fn arbitrary_with(args: Self::Parameters) -> Self::Strategy
Source§impl<T: ComplexField + ComplexField<RealField = <T as ComplexField>::RealField>, R: DimName, C: DimName> FiniteDimInnerSpace for OMatrix<T, R, C>
impl<T: ComplexField + ComplexField<RealField = <T as ComplexField>::RealField>, R: DimName, C: DimName> FiniteDimInnerSpace for OMatrix<T, R, C>
Source§fn orthonormalize(vs: &mut [Self]) -> usize
fn orthonormalize(vs: &mut [Self]) -> usize
Source§fn orthonormal_subspace_basis<F>(vs: &[Self], f: F)
fn orthonormal_subspace_basis<F>(vs: &[Self], f: F)
vs
. If vs
is not a free family, the result is
unspecified.Source§impl<T, R: DimName, C: DimName> FiniteDimVectorSpace for OMatrix<T, R, C>
impl<T, R: DimName, C: DimName> FiniteDimVectorSpace for OMatrix<T, R, C>
Source§fn canonical_basis_element(i: usize) -> Self
fn canonical_basis_element(i: usize) -> Self
Source§unsafe fn component_unchecked(&self, i: usize) -> &T
unsafe fn component_unchecked(&self, i: usize) -> &T
&self[i]
but without bound-checking.Source§unsafe fn component_unchecked_mut(&mut self, i: usize) -> &mut T
unsafe fn component_unchecked_mut(&mut self, i: usize) -> &mut T
&mut self[i]
but without bound-checking.Source§fn canonical_basis<F>(f: F)
fn canonical_basis<F>(f: F)
f
returns false
.Source§impl<T, R: Dim, C: Dim> From<[Matrix<<T as SimdValue>::Element, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<<T as SimdValue>::Element>>; 16]> for OMatrix<T, R, C>
impl<T, R: Dim, C: Dim> From<[Matrix<<T as SimdValue>::Element, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<<T as SimdValue>::Element>>; 16]> for OMatrix<T, R, C>
Source§impl<T, R: Dim, C: Dim> From<[Matrix<<T as SimdValue>::Element, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<<T as SimdValue>::Element>>; 2]> for OMatrix<T, R, C>
impl<T, R: Dim, C: Dim> From<[Matrix<<T as SimdValue>::Element, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<<T as SimdValue>::Element>>; 2]> for OMatrix<T, R, C>
Source§impl<T, R: Dim, C: Dim> From<[Matrix<<T as SimdValue>::Element, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<<T as SimdValue>::Element>>; 4]> for OMatrix<T, R, C>
impl<T, R: Dim, C: Dim> From<[Matrix<<T as SimdValue>::Element, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<<T as SimdValue>::Element>>; 4]> for OMatrix<T, R, C>
Source§impl<T, R: Dim, C: Dim> From<[Matrix<<T as SimdValue>::Element, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<<T as SimdValue>::Element>>; 8]> for OMatrix<T, R, C>
impl<T, R: Dim, C: Dim> From<[Matrix<<T as SimdValue>::Element, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<<T as SimdValue>::Element>>; 8]> for OMatrix<T, R, C>
Source§impl<T> From<ColumnMatrix2<T>> for OMatrix<T, U2, U2>
impl<T> From<ColumnMatrix2<T>> for OMatrix<T, U2, U2>
Source§fn from(m: ColumnMatrix2<T>) -> Self
fn from(m: ColumnMatrix2<T>) -> Self
Source§impl<T> From<ColumnMatrix2x3<T>> for OMatrix<T, U2, U3>
impl<T> From<ColumnMatrix2x3<T>> for OMatrix<T, U2, U3>
Source§fn from(m: ColumnMatrix2x3<T>) -> Self
fn from(m: ColumnMatrix2x3<T>) -> Self
Source§impl<T> From<ColumnMatrix3<T>> for OMatrix<T, U3, U3>
impl<T> From<ColumnMatrix3<T>> for OMatrix<T, U3, U3>
Source§fn from(m: ColumnMatrix3<T>) -> Self
fn from(m: ColumnMatrix3<T>) -> Self
Source§impl<T> From<ColumnMatrix3x4<T>> for OMatrix<T, U3, U4>
impl<T> From<ColumnMatrix3x4<T>> for OMatrix<T, U3, U4>
Source§fn from(m: ColumnMatrix3x4<T>) -> Self
fn from(m: ColumnMatrix3x4<T>) -> Self
Source§impl<T> From<ColumnMatrix4<T>> for OMatrix<T, U4, U4>
impl<T> From<ColumnMatrix4<T>> for OMatrix<T, U4, U4>
Source§fn from(m: ColumnMatrix4<T>) -> Self
fn from(m: ColumnMatrix4<T>) -> Self
Source§impl<'a, T: Scalar + Zero, R: Dim, C: Dim, S> From<CsMatrix<T, R, C, S>> for OMatrix<T, R, C>
impl<'a, T: Scalar + Zero, R: Dim, C: Dim, S> From<CsMatrix<T, R, C, S>> for OMatrix<T, R, C>
Source§impl<T: SimdRealField, R, const D: usize> From<Isometry<T, R, D>> for OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>where
Const<D>: DimNameAdd<U1>,
R: SubsetOf<OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>>,
DefaultAllocator: Allocator<DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,
impl<T: SimdRealField, R, const D: usize> From<Isometry<T, R, D>> for OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>where
Const<D>: DimNameAdd<U1>,
R: SubsetOf<OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>>,
DefaultAllocator: Allocator<DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,
Source§impl<T: Scalar + Zero + One, const D: usize> From<Scale<T, D>> for OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>where
Const<D>: DimNameAdd<U1>,
DefaultAllocator: Allocator<DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<DimNameSum<Const<D>, U1>, U1> + Allocator<Const<D>>,
impl<T: Scalar + Zero + One, const D: usize> From<Scale<T, D>> for OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>where
Const<D>: DimNameAdd<U1>,
DefaultAllocator: Allocator<DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<DimNameSum<Const<D>, U1>, U1> + Allocator<Const<D>>,
Source§impl<T: SimdRealField, R, const D: usize> From<Similarity<T, R, D>> for OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>where
Const<D>: DimNameAdd<U1>,
R: SubsetOf<OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>>,
DefaultAllocator: Allocator<DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,
impl<T: SimdRealField, R, const D: usize> From<Similarity<T, R, D>> for OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>where
Const<D>: DimNameAdd<U1>,
R: SubsetOf<OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>>,
DefaultAllocator: Allocator<DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,
Source§fn from(sim: Similarity<T, R, D>) -> Self
fn from(sim: Similarity<T, R, D>) -> Self
Source§impl<T: RealField, C, const D: usize> From<Transform<T, C, D>> for OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>where
Const<D>: DimNameAdd<U1>,
C: TCategory,
DefaultAllocator: Allocator<DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,
impl<T: RealField, C, const D: usize> From<Transform<T, C, D>> for OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>where
Const<D>: DimNameAdd<U1>,
C: TCategory,
DefaultAllocator: Allocator<DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,
Source§impl<T: Scalar + Zero + One, const D: usize> From<Translation<T, D>> for OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>where
Const<D>: DimNameAdd<U1>,
DefaultAllocator: Allocator<DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<Const<D>>,
impl<T: Scalar + Zero + One, const D: usize> From<Translation<T, D>> for OMatrix<T, DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>where
Const<D>: DimNameAdd<U1>,
DefaultAllocator: Allocator<DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>> + Allocator<Const<D>>,
Source§fn from(t: Translation<T, D>) -> Self
fn from(t: Translation<T, D>) -> Self
Source§impl<T: ComplexField + ComplexField<RealField = <T as ComplexField>::RealField>, R: DimName, C: DimName> InnerSpace for OMatrix<T, R, C>
impl<T: ComplexField + ComplexField<RealField = <T as ComplexField>::RealField>, R: DimName, C: DimName> InnerSpace for OMatrix<T, R, C>
Source§fn angle(&self, other: &Self) -> <T as ComplexField>::RealField
fn angle(&self, other: &Self) -> <T as ComplexField>::RealField
Source§fn inner_product(&self, other: &Self) -> T
fn inner_product(&self, other: &Self) -> T
self
with other
.Source§impl<T> Into<ColumnMatrix2<T>> for OMatrix<T, U2, U2>
impl<T> Into<ColumnMatrix2<T>> for OMatrix<T, U2, U2>
Source§fn into(self) -> ColumnMatrix2<T>
fn into(self) -> ColumnMatrix2<T>
Source§impl<T> Into<ColumnMatrix2x3<T>> for OMatrix<T, U2, U3>
impl<T> Into<ColumnMatrix2x3<T>> for OMatrix<T, U2, U3>
Source§fn into(self) -> ColumnMatrix2x3<T>
fn into(self) -> ColumnMatrix2x3<T>
Source§impl<T> Into<ColumnMatrix3<T>> for OMatrix<T, U3, U3>
impl<T> Into<ColumnMatrix3<T>> for OMatrix<T, U3, U3>
Source§fn into(self) -> ColumnMatrix3<T>
fn into(self) -> ColumnMatrix3<T>
Source§impl<T> Into<ColumnMatrix3x4<T>> for OMatrix<T, U3, U4>
impl<T> Into<ColumnMatrix3x4<T>> for OMatrix<T, U3, U4>
Source§fn into(self) -> ColumnMatrix3x4<T>
fn into(self) -> ColumnMatrix3x4<T>
Source§impl<T> Into<ColumnMatrix4<T>> for OMatrix<T, U4, U4>
impl<T> Into<ColumnMatrix4<T>> for OMatrix<T, U4, U4>
Source§fn into(self) -> ColumnMatrix4<T>
fn into(self) -> ColumnMatrix4<T>
Source§impl<T, R: Dim, C: Dim> Lattice for OMatrix<T, R, C>
impl<T, R: Dim, C: Dim> Lattice for OMatrix<T, R, C>
Source§fn meet_join(&self, other: &Self) -> (Self, Self)
fn meet_join(&self, other: &Self) -> (Self, Self)
Source§fn partial_min<'a>(&'a self, other: &'a Self) -> Option<&'a Self>
fn partial_min<'a>(&'a self, other: &'a Self) -> Option<&'a Self>
self
and other
if they are comparable.Source§fn partial_max<'a>(&'a self, other: &'a Self) -> Option<&'a Self>
fn partial_max<'a>(&'a self, other: &'a Self) -> Option<&'a Self>
self
and other
if they are comparable.Source§fn partial_sort2<'a>(&'a self, other: &'a Self) -> Option<(&'a Self, &'a Self)>
fn partial_sort2<'a>(&'a self, other: &'a Self) -> Option<(&'a Self, &'a Self)>
Source§fn partial_clamp<'a>(&'a self, min: &'a Self, max: &'a Self) -> Option<&'a Self>
fn partial_clamp<'a>(&'a self, min: &'a Self, max: &'a Self) -> Option<&'a Self>
value
between min
and max
. Returns None
if value
is not comparable to
min
or max
.Source§impl<T: SimdComplexField, R: Dim, C: Dim> Normed for OMatrix<T, R, C>where
DefaultAllocator: Allocator<R, C>,
impl<T: SimdComplexField, R: Dim, C: Dim> Normed for OMatrix<T, R, C>where
DefaultAllocator: Allocator<R, C>,
Source§type Norm = <T as SimdComplexField>::SimdRealField
type Norm = <T as SimdComplexField>::SimdRealField
Source§fn norm(&self) -> T::SimdRealField
fn norm(&self) -> T::SimdRealField
Source§fn norm_squared(&self) -> T::SimdRealField
fn norm_squared(&self) -> T::SimdRealField
Source§fn unscale_mut(&mut self, n: Self::Norm)
fn unscale_mut(&mut self, n: Self::Norm)
self
by n.Source§impl<T: ComplexField + ComplexField<RealField = <T as ComplexField>::RealField>, R: DimName, C: DimName> NormedSpace for OMatrix<T, R, C>
impl<T: ComplexField + ComplexField<RealField = <T as ComplexField>::RealField>, R: DimName, C: DimName> NormedSpace for OMatrix<T, R, C>
Source§type RealField = <T as ComplexField>::RealField
type RealField = <T as ComplexField>::RealField
Source§type ComplexField = T
type ComplexField = T
Source§fn norm_squared(&self) -> <T as ComplexField>::RealField
fn norm_squared(&self) -> <T as ComplexField>::RealField
Source§fn norm(&self) -> <T as ComplexField>::RealField
fn norm(&self) -> <T as ComplexField>::RealField
Source§fn normalize_mut(&mut self) -> <T as ComplexField>::RealField
fn normalize_mut(&mut self) -> <T as ComplexField>::RealField
Source§fn try_normalize(
&self,
min_norm: <T as ComplexField>::RealField,
) -> Option<Self>
fn try_normalize( &self, min_norm: <T as ComplexField>::RealField, ) -> Option<Self>
eps
.Source§fn try_normalize_mut(
&mut self,
min_norm: <T as ComplexField>::RealField,
) -> Option<<T as ComplexField>::RealField>
fn try_normalize_mut( &mut self, min_norm: <T as ComplexField>::RealField, ) -> Option<<T as ComplexField>::RealField>
eps
. Read moreSource§impl<T, D: DimName> One for OMatrix<T, D, D>where
T: Scalar + Zero + One + ClosedMulAssign + ClosedAddAssign,
DefaultAllocator: Allocator<D, D>,
impl<T, D: DimName> One for OMatrix<T, D, D>where
T: Scalar + Zero + One + ClosedMulAssign + ClosedAddAssign,
DefaultAllocator: Allocator<D, D>,
Source§impl<'a, T, D: DimName> Product<&'a Matrix<T, D, D, <DefaultAllocator as Allocator<D, D>>::Buffer<T>>> for OMatrix<T, D, D>where
T: Scalar + Zero + One + ClosedMulAssign + ClosedAddAssign,
DefaultAllocator: Allocator<D, D>,
impl<'a, T, D: DimName> Product<&'a Matrix<T, D, D, <DefaultAllocator as Allocator<D, D>>::Buffer<T>>> for OMatrix<T, D, D>where
T: Scalar + Zero + One + ClosedMulAssign + ClosedAddAssign,
DefaultAllocator: Allocator<D, D>,
Source§impl<T, D: DimName> Product for OMatrix<T, D, D>where
T: Scalar + Zero + One + ClosedMulAssign + ClosedAddAssign,
DefaultAllocator: Allocator<D, D>,
impl<T, D: DimName> Product for OMatrix<T, D, D>where
T: Scalar + Zero + One + ClosedMulAssign + ClosedAddAssign,
DefaultAllocator: Allocator<D, D>,
Source§impl<T, R, C> SimdValue for OMatrix<T, R, C>
impl<T, R, C> SimdValue for OMatrix<T, R, C>
Source§type Element = Matrix<<T as SimdValue>::Element, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<<T as SimdValue>::Element>>
type Element = Matrix<<T as SimdValue>::Element, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<<T as SimdValue>::Element>>
Source§type SimdBool = <T as SimdValue>::SimdBool
type SimdBool = <T as SimdValue>::SimdBool
self
.Source§unsafe fn extract_unchecked(&self, i: usize) -> Self::Element
unsafe fn extract_unchecked(&self, i: usize) -> Self::Element
self
without bound-checking. Read moreSource§unsafe fn replace_unchecked(&mut self, i: usize, val: Self::Element)
unsafe fn replace_unchecked(&mut self, i: usize, val: Self::Element)
Source§impl<T1, T2, R1, C1, R2, C2> SubsetOf<Matrix<T2, R2, C2, <DefaultAllocator as Allocator<R2, C2>>::Buffer<T2>>> for OMatrix<T1, R1, C1>where
R1: Dim,
C1: Dim,
R2: Dim,
C2: Dim,
T1: Scalar,
T2: Scalar + SupersetOf<T1>,
DefaultAllocator: Allocator<R2, C2> + Allocator<R1, C1> + SameShapeAllocator<R1, C1, R2, C2>,
ShapeConstraint: SameNumberOfRows<R1, R2> + SameNumberOfColumns<C1, C2>,
impl<T1, T2, R1, C1, R2, C2> SubsetOf<Matrix<T2, R2, C2, <DefaultAllocator as Allocator<R2, C2>>::Buffer<T2>>> for OMatrix<T1, R1, C1>where
R1: Dim,
C1: Dim,
R2: Dim,
C2: Dim,
T1: Scalar,
T2: Scalar + SupersetOf<T1>,
DefaultAllocator: Allocator<R2, C2> + Allocator<R1, C1> + SameShapeAllocator<R1, C1, R2, C2>,
ShapeConstraint: SameNumberOfRows<R1, R2> + SameNumberOfColumns<C1, C2>,
Source§fn to_superset(&self) -> OMatrix<T2, R2, C2>
fn to_superset(&self) -> OMatrix<T2, R2, C2>
self
to the equivalent element of its superset.Source§fn is_in_subset(m: &OMatrix<T2, R2, C2>) -> bool
fn is_in_subset(m: &OMatrix<T2, R2, C2>) -> bool
element
is actually part of the subset Self
(and can be converted to it).Source§fn from_superset_unchecked(m: &OMatrix<T2, R2, C2>) -> Self
fn from_superset_unchecked(m: &OMatrix<T2, R2, C2>) -> Self
self.to_superset
but without any property checks. Always succeeds.Source§impl<'a, T, C: Dim> Sum<&'a Matrix<T, Dyn, C, <DefaultAllocator as Allocator<Dyn, C>>::Buffer<T>>> for OMatrix<T, Dyn, C>
impl<'a, T, C: Dim> Sum<&'a Matrix<T, Dyn, C, <DefaultAllocator as Allocator<Dyn, C>>::Buffer<T>>> for OMatrix<T, Dyn, C>
Source§impl<'a, T, R: DimName, C: DimName> Sum<&'a Matrix<T, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<T>>> for OMatrix<T, R, C>
impl<'a, T, R: DimName, C: DimName> Sum<&'a Matrix<T, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<T>>> for OMatrix<T, R, C>
Source§impl<T, C: Dim> Sum for OMatrix<T, Dyn, C>
impl<T, C: Dim> Sum for OMatrix<T, Dyn, C>
Source§fn sum<I: Iterator<Item = OMatrix<T, Dyn, C>>>(iter: I) -> OMatrix<T, Dyn, C>
fn sum<I: Iterator<Item = OMatrix<T, Dyn, C>>>(iter: I) -> OMatrix<T, Dyn, C>
§Example
assert_eq!(vec![DVector::repeat(3, 1.0f64),
DVector::repeat(3, 1.0f64),
DVector::repeat(3, 1.0f64)].into_iter().sum::<DVector<f64>>(),
DVector::repeat(3, 1.0f64) + DVector::repeat(3, 1.0f64) + DVector::repeat(3, 1.0f64));
§Panics
Panics if the iterator is empty:
iter::empty::<DMatrix<f64>>().sum::<DMatrix<f64>>(); // panics!