pub struct TriMatBase<IStorage, DStorage> { /* private fields */ }
Expand description
Sparse matrix in the triplet format.
Sparse matrices in the triplet format use three arrays of equal sizes (accessible through the
methods row_inds
, col_inds
, data
), the first one
storing the row indices of non-zero values, the second storing the
corresponding column indices and the last array storing the corresponding
scalar value. If a non-zero location is repeated in the arrays, the
non-zero value is taken as the sum of the corresponding scalar entries.
This format is useful for iteratively building a sparse matrix, since the various non-zero entries can be specified in any order, or even partially as is common in physics with partial derivatives equations.
This format cannot be used for arithmetic operations. Arithmetic operations
are more efficient in the compressed format.
A matrix in the triplet format can be converted to the compressed format
using the methods to_csc
and to_csr
.
The TriMatBase
type is parameterized by the storage type for the row and
column indices, IStorage
, and by the storage type for the non-zero values
DStorage
. Convenient aliases are availaible to specify frequent variant:
TriMat
refers to a triplet matrix owning the storage of its indices and
and values, TriMatView
refers to a triplet matrix with slices to store
its indices and values, while TriMatViewMut
refers to a a triplet matrix
using mutable slices.
Additionaly, the type aliases TriMatI
, TriMatViewI
and
TriMatViewMutI
can be used to choose an index type different from the
default usize
.
Implementations§
Source§impl<N, I: SpIndex> TriMatBase<Vec<I>, Vec<N>>
§Methods for creating triplet matrices that own their data.
impl<N, I: SpIndex> TriMatBase<Vec<I>, Vec<N>>
§Methods for creating triplet matrices that own their data.
Sourcepub fn new(shape: (usize, usize)) -> Self
pub fn new(shape: (usize, usize)) -> Self
Create a new triplet matrix of shape (nb_rows, nb_cols)
Sourcepub fn with_capacity(shape: (usize, usize), cap: usize) -> Self
pub fn with_capacity(shape: (usize, usize), cap: usize) -> Self
Create a new triplet matrix of shape (nb_rows, nb_cols)
, and
pre-allocate cap
elements on the backing storage
Sourcepub fn from_triplets(
shape: (usize, usize),
row_inds: Vec<I>,
col_inds: Vec<I>,
data: Vec<N>,
) -> Self
pub fn from_triplets( shape: (usize, usize), row_inds: Vec<I>, col_inds: Vec<I>, data: Vec<N>, ) -> Self
Create a triplet matrix from its raw components. All arrays should have the same length.
§Panics
- if the arrays don’t have the same length
- if either the row or column indices are out of bounds.
Sourcepub fn add_triplet(&mut self, row: usize, col: usize, val: N)
pub fn add_triplet(&mut self, row: usize, col: usize, val: N)
Append a non-zero triplet to this matrix.
Sourcepub fn reserve_exact(&mut self, cap: usize)
pub fn reserve_exact(&mut self, cap: usize)
Reserve exactly cap
non-zeros
Source§impl<N, I: SpIndex, IStorage, DStorage> TriMatBase<IStorage, DStorage>
§Common methods shared by all variants of triplet matrices
impl<N, I: SpIndex, IStorage, DStorage> TriMatBase<IStorage, DStorage>
§Common methods shared by all variants of triplet matrices
Sourcepub fn find_locations(&self, row: usize, col: usize) -> Vec<TripletIndex>
pub fn find_locations(&self, row: usize, col: usize) -> Vec<TripletIndex>
Find all non-zero entries at the location given by row
and col
Sourcepub fn transpose_view(&self) -> TriMatViewI<'_, N, I>
pub fn transpose_view(&self) -> TriMatViewI<'_, N, I>
Get a transposed view of this matrix
Sourcepub fn triplet_iter(&self) -> TriMatIter<Iter<'_, I>, Iter<'_, I>, Iter<'_, N>> ⓘ
pub fn triplet_iter(&self) -> TriMatIter<Iter<'_, I>, Iter<'_, I>, Iter<'_, N>> ⓘ
Get an iterator over non-zero elements stored by this matrix
Sourcepub fn to_csc<Iptr: SpIndex>(&self) -> CsMatI<N, I, Iptr>
pub fn to_csc<Iptr: SpIndex>(&self) -> CsMatI<N, I, Iptr>
Create a CSC matrix from this triplet matrix
Sourcepub fn to_csr<Iptr: SpIndex>(&self) -> CsMatI<N, I, Iptr>
pub fn to_csr<Iptr: SpIndex>(&self) -> CsMatI<N, I, Iptr>
Create a CSR matrix from this triplet matrix
pub fn view(&self) -> TriMatViewI<'_, N, I>
Source§impl<'a, N, I: SpIndex> TriMatBase<&'a [I], &'a [N]>
impl<'a, N, I: SpIndex> TriMatBase<&'a [I], &'a [N]>
Sourcepub fn triplet_iter_rbr(
&self,
) -> TriMatIter<Iter<'a, I>, Iter<'a, I>, Iter<'a, N>> ⓘ
pub fn triplet_iter_rbr( &self, ) -> TriMatIter<Iter<'a, I>, Iter<'a, I>, Iter<'a, N>> ⓘ
Get an iterator over non-zero elements stored by this matrix
Reborrowing version of triplet_iter()
.
Source§impl<N, I: SpIndex, IStorage, DStorage> TriMatBase<IStorage, DStorage>
impl<N, I: SpIndex, IStorage, DStorage> TriMatBase<IStorage, DStorage>
Sourcepub fn set_triplet(
&mut self,
TripletIndex: TripletIndex,
row: usize,
col: usize,
val: N,
)
pub fn set_triplet( &mut self, TripletIndex: TripletIndex, row: usize, col: usize, val: N, )
Replace a non-zero value at the given index.
Indices can be obtained using find_locations
.
pub fn view_mut(&mut self) -> TriMatViewMutI<'_, N, I>
Trait Implementations§
Source§impl<'a, N, I, IS, DS> IntoIterator for &'a TriMatBase<IS, DS>
impl<'a, N, I, IS, DS> IntoIterator for &'a TriMatBase<IS, DS>
Source§impl<IStorage: PartialEq, DStorage: PartialEq> PartialEq for TriMatBase<IStorage, DStorage>
impl<IStorage: PartialEq, DStorage: PartialEq> PartialEq for TriMatBase<IStorage, DStorage>
Source§fn eq(&self, other: &TriMatBase<IStorage, DStorage>) -> bool
fn eq(&self, other: &TriMatBase<IStorage, DStorage>) -> bool
self
and other
values to be equal, and is used by ==
.Source§impl<'a, N, I, IS, DS> SparseMat for &'a TriMatBase<IS, DS>
impl<'a, N, I, IS, DS> SparseMat for &'a TriMatBase<IS, DS>
Source§impl<N, I, IS, DS> SparseMat for TriMatBase<IS, DS>
impl<N, I, IS, DS> SparseMat for TriMatBase<IS, DS>
impl<IStorage: Eq, DStorage: Eq> Eq for TriMatBase<IStorage, DStorage>
impl<IStorage, DStorage> StructuralPartialEq for TriMatBase<IStorage, DStorage>
Auto Trait Implementations§
impl<IStorage, DStorage> Freeze for TriMatBase<IStorage, DStorage>
impl<IStorage, DStorage> RefUnwindSafe for TriMatBase<IStorage, DStorage>where
IStorage: RefUnwindSafe,
DStorage: RefUnwindSafe,
impl<IStorage, DStorage> Send for TriMatBase<IStorage, DStorage>
impl<IStorage, DStorage> Sync for TriMatBase<IStorage, DStorage>
impl<IStorage, DStorage> Unpin for TriMatBase<IStorage, DStorage>
impl<IStorage, DStorage> UnwindSafe for TriMatBase<IStorage, DStorage>where
IStorage: UnwindSafe,
DStorage: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).Source§unsafe fn to_subset_unchecked(&self) -> SS
unsafe fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.