lazymatrix::SprsCsr
LazyMatrix for Rust · 0.8.1
pub struct SprsCsr<M>A checked CSR matrix or view that supports contiguous borrowed rows.
sprs stores CSC and CSR orientation in a runtime flag on the same type. This wrapper checks that flag once, in try_new, so row access never needs a gather or an orientation conversion. Construction and row borrowing take O(1) time and allocate nothing. The wrapper retains ownership of the supplied matrix or view and exposes no mutable access that could change its orientation.
Operators and statistics accept any sprs index type. Borrowing column indices as slices requires usize to match SparseRows. Pointer indices may use any supported width.
use lazymatrix::{SparseRows, SprsCsr};
use sprs::CsMat;
let x = CsMat::new((2, 3), vec![0, 2, 3], vec![0, 2, 1], vec![1.0, 0.0, 2.0]);
let csr = SprsCsr::try_new(x.view()).unwrap();
let (columns, values) = csr.sparse_row(0);
assert_eq!(columns, &[0, 2]);
assert_eq!(values, &[1.0, 0.0]);A plain sprs matrix has no row-borrowing capability, since it could be CSC:
use lazymatrix::SparseRows;
fn needs_rows<M: SparseRows<f64>>() {}
needs_rows::<sprs::CsMat<f64>>();Checked CSC storage cannot borrow rows:
use lazymatrix::{SparseRows, SprsCsc};
fn needs_rows<M: SparseRows<f64>>() {}
needs_rows::<SprsCsc<sprs::CsMat<f64>>>();Indices of another width cannot provide a borrowed &[usize]:
use lazymatrix::{SparseRows, SprsCsr};
fn needs_rows<M: SparseRows<f64>>() {}
needs_rows::<SprsCsr<sprs::CsMatI<f64, u32>>>();Checked CSR storage does not provide contiguous columns:
use lazymatrix::{SparseColumns, SprsCsr};
fn needs_columns<M: SparseColumns<f64>>() {}
needs_columns::<SprsCsr<sprs::CsMat<f64>>>();Inherent implementation
impl<F, I, IP, IS, DS, Iptr> SprsCsr<sprs::CsMatBase<F, I, IP, IS, DS, Iptr>> where I: SpIndex, Iptr: SpIndex, IP: Deref<Target = [Iptr]>, IS: Deref<Target = [I]>, DS: Deref<Target = [F]>try_new
pub fn try_new(
matrix: CsMatBase<F, I, IP, IS, DS, Iptr>
) -> Result<Self, CsMatBase<F, I, IP, IS, DS, Iptr>>Wrap CSR storage without copying, or return the original CSC input.
To convert CSC storage explicitly, call sprs's to_csr or into_csr before this constructor. Borrow existing data by passing matrix.view().
Inherent implementation
impl<M> SprsCsr<M>as_inner
pub fn as_inner(&self) -> &MBorrow the original matrix or view.
into_inner
pub fn into_inner(self) -> MRecover the original matrix or view without copying.
Implementation of Clone
impl<M: core::clone::Clone> Clone for SprsCsr<M>clone
fn clone(&self) -> SelfImplementation of ColumnStats
impl<M: ColumnStats<F>, F: Scalar> ColumnStats<F> for SprsCsr<M>col_l1
fn col_l1(&self) -> Result<Vec<F>, <Self as MatrixErrorType>::Error>col_l1_centered
fn col_l1_centered(
&self,
centers: &[F]
) -> Result<Vec<F>, <Self as MatrixErrorType>::Error>col_l2
fn col_l2(&self) -> Result<Vec<F>, <Self as MatrixErrorType>::Error>col_l2_centered
fn col_l2_centered(
&self,
centers: &[F]
) -> Result<Vec<F>, <Self as MatrixErrorType>::Error>col_maxabs
fn col_maxabs(&self) -> Result<Vec<F>, <Self as MatrixErrorType>::Error>col_maxabs_centered
fn col_maxabs_centered(
&self,
centers: &[F]
) -> Result<Vec<F>, <Self as MatrixErrorType>::Error>col_means
fn col_means(&self) -> Result<Vec<F>, <Self as MatrixErrorType>::Error>col_mins
fn col_mins(&self) -> Result<Vec<F>, <Self as MatrixErrorType>::Error>col_ranges
fn col_ranges(&self) -> Result<Vec<F>, <Self as MatrixErrorType>::Error>col_sds
fn col_sds(&self) -> Result<Vec<F>, <Self as MatrixErrorType>::Error>normalization_stats
fn normalization_stats(
&self,
spec: lazymatrix::Normalization
) -> Result<lazymatrix::NormalizationStats<F>, <Self as MatrixErrorType>::Error>Implementation of Copy
impl<M: core::marker::Copy> Copy for SprsCsr<M>Implementation of Debug
impl<M: core::fmt::Debug> Debug for SprsCsr<M>fmt
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::ResultImplementation of MatMatInto
impl<M: lazymatrix::MatMatInto<F>, F: Scalar> MatMatInto<F> for SprsCsr<M>matmat_into
fn matmat_into<R, O>(
&self,
rhs: &R,
out: &mut O
) -> Result<(), <Self as MatrixErrorType>::Error> where R: lazymatrix::MatrixRead<F> + ?Sized, O: lazymatrix::MatrixRead<F> + lazymatrix::MatrixWrite<F> + ?Sizedmatmat_normalized_into
fn matmat_normalized_into<R, O>(
&self,
rhs: &R,
centers: Option<&[F]>,
scales: Option<&[F]>,
out: &mut O
) -> Result<(), <Self as MatrixErrorType>::Error> where R: lazymatrix::MatrixRead<F> + ?Sized, O: lazymatrix::MatrixRead<F> + lazymatrix::MatrixWrite<F> + ?SizedImplementation of MatTransposeMatInto
impl<M: lazymatrix::MatTransposeMatInto<F>, F: Scalar> MatTransposeMatInto<F> for SprsCsr<M>mat_transpose_mat_into
fn mat_transpose_mat_into<R, O>(
&self,
rhs: &R,
out: &mut O
) -> Result<(), <Self as MatrixErrorType>::Error> where R: lazymatrix::MatrixRead<F> + ?Sized, O: lazymatrix::MatrixRead<F> + lazymatrix::MatrixWrite<F> + ?Sizedmat_transpose_mat_normalized_into
fn mat_transpose_mat_normalized_into<R, O>(
&self,
rhs: &R,
centers: Option<&[F]>,
scales: Option<&[F]>,
out: &mut O
) -> Result<(), <Self as MatrixErrorType>::Error> where R: lazymatrix::MatrixRead<F> + ?Sized, O: lazymatrix::MatrixRead<F> + lazymatrix::MatrixWrite<F> + ?SizedImplementation of MatTransposeVec
impl<M: MatTransposeVec<V>, V> MatTransposeVec<V> for SprsCsr<M>mat_transpose_vec
fn mat_transpose_vec(
&self,
x: &V
) -> Result<V, <Self as MatrixErrorType>::Error>Implementation of MatTransposeVecInto
impl<M: MatTransposeVecInto<X, Y>, X, Y> MatTransposeVecInto<X, Y> for SprsCsr<M>mat_transpose_vec_into
fn mat_transpose_vec_into(
&self,
x: &X,
out: &mut Y
) -> Result<(), <Self as MatrixErrorType>::Error>Implementation of MatTransposeVecScaledInto
impl<M: MatTransposeVecScaledInto<X, Y, F>, X, Y, F> MatTransposeVecScaledInto<X, Y, F> for SprsCsr<M>mat_transpose_vec_scaled_into
fn mat_transpose_vec_scaled_into(
&self,
alpha: F,
x: &X,
beta: F,
out: &mut Y
) -> Result<(), <Self as MatrixErrorType>::Error>Implementation of MatVec
impl<M: MatVec<V>, V> MatVec<V> for SprsCsr<M>matvec
fn matvec(&self, x: &V) -> Result<V, <Self as MatrixErrorType>::Error>Implementation of MatVecInto
impl<M: MatVecInto<X, Y>, X, Y> MatVecInto<X, Y> for SprsCsr<M>matvec_into
fn matvec_into(
&self,
x: &X,
out: &mut Y
) -> Result<(), <Self as MatrixErrorType>::Error>Implementation of MatVecScaledInto
impl<M: MatVecScaledInto<X, Y, F>, X, Y, F> MatVecScaledInto<X, Y, F> for SprsCsr<M>matvec_scaled_into
fn matvec_scaled_into(
&self,
alpha: F,
x: &X,
beta: F,
out: &mut Y
) -> Result<(), <Self as MatrixErrorType>::Error>Implementation of MaterializeDense
impl<M: lazymatrix::MaterializeDense<F>, F: Scalar> MaterializeDense<F> for SprsCsr<M>materialize_normalized_into
fn materialize_normalized_into<O: lazymatrix::MatrixWrite<F> + ?Sized>(
&self,
centers: Option<&[F]>,
scales: Option<&[F]>,
out: &mut O
) -> Result<(), <Self as MatrixErrorType>::Error>Implementation of MatrixErrorType
impl<M: lazymatrix::MatrixErrorType> MatrixErrorType for SprsCsr<M>Error
type Error = <M as MatrixErrorType>::Error;Implementation of MatrixShape
impl<M: MatrixShape> MatrixShape for SprsCsr<M>ncols
fn ncols(&self) -> usizenrows
fn nrows(&self) -> usizeImplementation of SparseRows
impl<F, IP, IS, DS, Iptr> SparseRows<F> for SprsCsr<sprs::CsMatBase<F, usize, IP, IS, DS, Iptr>> where F: Scalar, Iptr: SpIndex, IP: Deref<Target = [Iptr]>, IS: Deref<Target = [usize]>, DS: Deref<Target = [F]>sparse_row
fn sparse_row(&self, i: usize) -> (&[usize], &[F])Implementation of SubmatrixKernel
impl<M: lazymatrix::SubmatrixKernel<F>, F: Scalar> SubmatrixKernel<F> for SprsCsr<M>materialize_submatrix_into
fn materialize_submatrix_into<O: lazymatrix::MatrixWrite<F> + ?Sized>(
&self,
rows: std::ops::Range<usize>,
columns: std::ops::Range<usize>,
centers: Option<&[F]>,
scales: Option<&[F]>,
out: &mut O
) -> Result<(), <Self as MatrixErrorType>::Error>submatrix_matvec_into
fn submatrix_matvec_into<X: lazymatrix::VectorView<F> + ?Sized, Y: lazymatrix::VectorViewMut<F> + ?Sized>(
&self,
rows: std::ops::Range<usize>,
columns: std::ops::Range<usize>,
centers: Option<&[F]>,
scales: Option<&[F]>,
alpha: F,
x: &X,
beta: F,
out: &mut Y
) -> Result<(), <Self as MatrixErrorType>::Error>submatrix_transpose_into
fn submatrix_transpose_into<X: lazymatrix::VectorView<F> + ?Sized, Y: lazymatrix::VectorViewMut<F> + ?Sized>(
&self,
rows: std::ops::Range<usize>,
columns: std::ops::Range<usize>,
centers: Option<&[F]>,
scales: Option<&[F]>,
alpha: F,
x: &X,
beta: F,
out: &mut Y
) -> Result<(), <Self as MatrixErrorType>::Error>Implementation of WeightedGramInto
impl<F, IP, IS, DS, Iptr> WeightedGramInto<F> for lazymatrix::SprsCsr<sprs::CsMatBase<F, usize, IP, IS, DS, Iptr>> where F: Scalar, Iptr: SpIndex, IP: Deref<Target = [Iptr]>, IS: Deref<Target = [usize]>, DS: Deref<Target = [F]>weighted_gram_into
fn weighted_gram_into<W, O>(
&self,
weights: &W,
out: &mut O
) -> Result<(), <Self as MatrixErrorType>::Error> where W: VectorView<F> + ?Sized, O: MatrixWrite<F> + ?SizedImplementation of WeightedGramKernel
impl<F, IP, IS, DS, Iptr> WeightedGramKernel<F> for lazymatrix::SprsCsr<sprs::CsMatBase<F, usize, IP, IS, DS, Iptr>> where F: Scalar, Iptr: SpIndex, IP: Deref<Target = [Iptr]>, IS: Deref<Target = [usize]>, DS: Deref<Target = [F]>weighted_gram_normalized_into
fn weighted_gram_normalized_into<W, O>(
&self,
weights: &W,
centers: Option<&[F]>,
scales: Option<&[F]>,
out: &mut O
) -> Result<(), <Self as MatrixErrorType>::Error> where W: VectorView<F> + ?Sized, O: MatrixWrite<F> + ?SizedImplementation of Freeze
impl<M> Freeze for SprsCsr<M> where M: FreezeImplementation of RefUnwindSafe
impl<M> RefUnwindSafe for SprsCsr<M> where M: RefUnwindSafeImplementation of Send
impl<M> Send for SprsCsr<M> where M: SendImplementation of Sync
impl<M> Sync for SprsCsr<M> where M: SyncImplementation of Unpin
impl<M> Unpin for SprsCsr<M> where M: UnpinImplementation of UnsafeUnpin
impl<M> UnsafeUnpin for SprsCsr<M> where M: UnsafeUnpinImplementation of UnwindSafe
impl<M> UnwindSafe for SprsCsr<M> where M: UnwindSafeImplementation of Any
impl<T> Any for T where T: 'static + ?SizedImplementation of Borrow
impl<T> Borrow<T> for T where T: ?SizedImplementation of BorrowMut
impl<T> BorrowMut<T> for T where T: ?SizedImplementation of ByRef
impl<T> ByRef<T> for TImplementation of CastableFrom
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT where ST: ?Sized, DT: ?SizedImplementation of CastableFrom
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT where ST: ?Sized, DT: ?SizedImplementation of CloneToUninit
impl<T> CloneToUninit for T where T: CloneImplementation of From
impl<T> From<T> for TImplementation of Imply
impl<T, U> Imply<T> for U where T: ?Sized, U: ?SizedImplementation of Into
impl<T, U> Into<U> for T where U: From<T>Implementation of IntoEither
impl<T> IntoEither for TImplementation of MatMat
impl<M, F> MatMat<F> for M where M: MatMatInto<F> + ?Sized, F: ScalarImplementation of MatTransposeMat
impl<M, F> MatTransposeMat<F> for M where M: MatTransposeMatInto<F> + ?Sized, F: ScalarImplementation of Pointable
impl<T> Pointable for TImplementation of Read
impl<T> Read<Exclusive, BecauseExclusive> for T where T: ?SizedImplementation of Same
impl<T> Same for TImplementation of SupersetOf
impl<SS, SP> SupersetOf<SS> for SP where SS: SubsetOf<SP>Implementation of ToOwned
impl<T> ToOwned for T where T: CloneImplementation of TryFrom
impl<T, U> TryFrom<U> for T where U: Into<T>Implementation of TryInto
impl<T, U> TryInto<U> for T where U: TryFrom<T>
