lazymatrix::SprsCsc
LazyMatrix for Rust · 0.8.1
pub struct SprsCsc<M>A checked CSC matrix or view that supports contiguous borrowed columns.
sprs stores CSC and CSR orientation in a runtime flag on the same type. This wrapper checks that flag once, in try_new, so column access never needs a gather or an orientation conversion. Construction and column 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, statistics, and logical columns accept any sprs index type. Borrowing row indices as slices requires usize to match SparseColumns.
use lazymatrix::{Centering, LazyMatrix, MatVec, Normalization, Scaling, SprsCsc};
use sprs::CsMat;
let x = CsMat::new_csc((3, 2), vec![0, 2, 3], vec![0, 2, 1], vec![1.0, 3.0, 2.0]);
let csc = SprsCsc::try_new(x.view()).unwrap();
let lazy = LazyMatrix::new(csc, Normalization::new(Centering::Mean, Scaling::Sd)).unwrap();
assert_eq!(lazy.matvec(&vec![1.0, -1.0]).unwrap().len(), 3);
assert_eq!(lazy.sparse_column(0).row_indices(), &[0, 2]);A plain sprs matrix has no column-borrowing capability, since it could be CSR:
use lazymatrix::SparseColumns;
fn needs_columns<M: SparseColumns<f64>>() {}
needs_columns::<sprs::CsMat<f64>>();use lazymatrix::RawColumns;
fn needs_columns<M: RawColumns<f64>>() {}
needs_columns::<sprs::CsMat<f64>>();Indices of another width cannot provide a borrowed &[usize]:
use lazymatrix::{SparseColumns, SprsCsc};
fn needs_columns<M: SparseColumns<f64>>() {}
needs_columns::<SprsCsc<sprs::CsMatI<f64, u32>>>();Inherent implementation
impl<F, I, IP, IS, DS, Iptr> SprsCsc<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 CSC storage without copying, or return the original CSR input.
To convert CSR storage explicitly, call sprs's to_csc or into_csc before this constructor. Borrow existing data by passing matrix.view().
Inherent implementation
impl<M> SprsCsc<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 SprsCsc<M>clone
fn clone(&self) -> SelfImplementation of ColumnStats
impl<M: ColumnStats<F>, F: Scalar> ColumnStats<F> for SprsCsc<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 SprsCsc<M>Implementation of Debug
impl<M: core::fmt::Debug> Debug for SprsCsc<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 SprsCsc<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 SprsCsc<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 SprsCsc<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 SprsCsc<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 SprsCsc<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 SprsCsc<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 SprsCsc<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 SprsCsc<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 SprsCsc<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 SprsCsc<M>Error
type Error = <M as MatrixErrorType>::Error;Implementation of MatrixShape
impl<M: MatrixShape> MatrixShape for SprsCsc<M>ncols
fn ncols(&self) -> usizenrows
fn nrows(&self) -> usizeImplementation of RawColumns
impl<F, I, IP, IS, DS, Iptr> RawColumns<F> for SprsCsc<sprs::CsMatBase<F, I, IP, IS, DS, Iptr>> where F: Scalar, I: SpIndex, Iptr: SpIndex, IP: Deref<Target = [Iptr]>, IS: Deref<Target = [I]>, DS: Deref<Target = [F]>Column
type Column<'a> = CsVecBase<&'a [I], &'a [F], F, I> where Self: 'a;raw_column
fn raw_column(&self, j: usize) -> <Self as RawColumns>::Column<'_>Implementation of SparseColumns
impl<F, IP, IS, DS, Iptr> SparseColumns<F> for SprsCsc<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_column
fn sparse_column(&self, j: usize) -> (&[usize], &[F])Implementation of SubmatrixKernel
impl<M: lazymatrix::SubmatrixKernel<F>, F: Scalar> SubmatrixKernel<F> for SprsCsc<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 WeightedColumnSumsInto
impl<F, IP, IS, DS, Iptr> WeightedColumnSumsInto<F> for lazymatrix::SprsCsc<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_column_sums_into
fn weighted_column_sums_into<W, O>(
&self,
weights: &W,
out: &mut O
) -> Result<(), <Self as MatrixErrorType>::Error> where W: VectorView<F> + ?Sized, O: VectorViewMut<F> + ?SizedImplementation of WeightedColumnSumsKernel
impl<F, IP, IS, DS, Iptr> WeightedColumnSumsKernel<F> for lazymatrix::SprsCsc<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_column_sums_normalized_into
fn weighted_column_sums_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: VectorViewMut<F> + ?SizedImplementation of WeightedGramInto
impl<F, IP, IS, DS, Iptr> WeightedGramInto<F> for lazymatrix::SprsCsc<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::SprsCsc<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 SprsCsc<M> where M: FreezeImplementation of RefUnwindSafe
impl<M> RefUnwindSafe for SprsCsc<M> where M: RefUnwindSafeImplementation of Send
impl<M> Send for SprsCsc<M> where M: SendImplementation of Sync
impl<M> Sync for SprsCsc<M> where M: SyncImplementation of Unpin
impl<M> Unpin for SprsCsc<M> where M: UnpinImplementation of UnsafeUnpin
impl<M> UnsafeUnpin for SprsCsc<M> where M: UnsafeUnpinImplementation of UnwindSafe
impl<M> UnwindSafe for SprsCsc<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>
