Struct sprs::CsVecBase[][src]

pub struct CsVecBase<IStorage, DStorage> { /* fields omitted */ }

A sparse vector, storing the indices of its non-zero data.

A CsVec represents a sparse vector by storing a sorted indices() array containing the locations of the non-zero values and a data() array containing the corresponding values. The format is compatible with CsMat, ie a CsVec can represent the row of a CSR matrix without any copying.

Similar to CsMat and TriMat, the CsVecBase type is parameterized over the indexing storage backend IStorage and the data storage backend DStorage. Type aliases are provided for common cases: CsVec represents a sparse vector owning its data, with Vecs as storage backends; CsVecView represents a sparse vector borrowing its data, using slices as storage backends; and CsVecViewMut represents a sparse vector that mutably borrows its data (but immutably borrows its indices).

Additionaly, the type aliases CsVecI, CsVecViewI, and CsVecViewMutI can be used to choose an index type different from the default usize.

Methods

impl<N, I: SpIndex> CsVecBase<Vec<I>, Vec<N>>
[src]

Create an owning CsVec from vector data.

Panics

  • if indices and data lengths differ
  • if the vector contains out of bounds indices

Create an empty CsVec, which can be used for incremental construction

Append an element to the sparse vector. Used for incremental building of the CsVec. The append should preserve the structure of the vector, ie the newly added index should be strictly greater than the last element of indices.

Panics

  • Panics if ind is lower or equal to the last element of self.indices()
  • Panics if ind is greater than self.dim()

Reserve size additional non-zero values.

Reserve exactly exact_size non-zero values.

Clear the underlying storage

impl<N, I, IStorage, DStorage> CsVecBase<IStorage, DStorage> where
    I: SpIndex,
    IStorage: Deref<Target = [I]>,
    DStorage: Deref<Target = [N]>, 
[src]

Get a view of this vector.

Important traits for VectorIterator<'a, N, I>

Iterate over the non zero values.

Example

use sprs::CsVec;
let v = CsVec::new(5, vec![0, 2, 4], vec![1., 2., 3.]);
let mut iter = v.iter();
assert_eq!(iter.next(), Some((0, &1.)));
assert_eq!(iter.next(), Some((2, &2.)));
assert_eq!(iter.next(), Some((4, &3.)));
assert_eq!(iter.next(), None);

The underlying indices.

The underlying non zero values.

The dimension of this vector.

The non zero count of this vector.

Check the sparse structure, namely that:

  • indices is sorted
  • indices are lower than dims()

Allocate a new vector equal to this one.

Clone the vector with another integer type for its indices

Panics

If the indices cannot be represented by the requested integer type.

View this vector as a matrix with only one row.

View this vector as a matrix with only one column.

Access element at given index, with logarithmic complexity

Find the non-zero index of the requested dimension index, returning None if no non-zero is present at the requested location.

Looking for the NnzIndex is done with logarithmic complexity, but once it is available, the NnzIndex enables retrieving the data with O(1) complexity.

Sparse vector dot product. The right-hand-side can be any type that can be interpreted as a sparse vector (hence sparse vectors, std vectors and slices, and ndarray's dense vectors work).

However, even if dense vectors work, it is more performant to use the dot_dense.

Panics

If the dimension of the vectors do not match.

Example

use sprs::CsVec;
let v1 = CsVec::new(8, vec![1, 2, 4, 6], vec![1.; 4]);
let v2 = CsVec::new(8, vec![1, 3, 5, 7], vec![2.; 4]);
assert_eq!(2., v1.dot(&v2));
assert_eq!(4., v1.dot(&v1));
assert_eq!(16., v2.dot(&v2));

Sparse-dense vector dot product. The right-hand-side can be any type that can be interpreted as a dense vector (hence std vectors and slices, and ndarray's dense vectors work).

Since the dot method can work with the same performance on dot vectors, the main interest of this method is to enforce at compile time that the rhs is dense.

Panics

If the dimension of the vectors do not match.

Fill a dense vector with our values

Transform this vector into a set of (index, value) tuples

Apply a function to each non-zero element, yielding a new matrix with the same sparsity structure.

impl<'a, N, I, IStorage, DStorage> CsVecBase<IStorage, DStorage> where
    N: 'a,
    I: 'a + SpIndex,
    IStorage: 'a + Deref<Target = [I]>,
    DStorage: DerefMut<Target = [N]>, 
[src]

Access element at given index, with logarithmic complexity

Apply a function to each non-zero element, mutating it

Important traits for VectorIteratorMut<'a, N, I>

Mutable iteration over the non-zero values of a sparse vector

Only the values can be changed, the sparse structure is kept.

impl<'a, N: 'a, I: 'a + SpIndex> CsVecBase<&'a [I], &'a [N]>
[src]

Create a borrowed CsVec over slice data.

Access element at given index, with logarithmic complexity

Re-borrowing version of at().

Create a borrowed CsVec over slice data without checking the structure This is unsafe because algorithms are free to assume that properties guaranteed by check_structure are enforced. For instance, non out-of-bounds indices can be relied upon to perform unchecked slice access.

impl<'a, N, I> CsVecBase<&'a [I], &'a mut [N]> where
    N: 'a,
    I: 'a + SpIndex
[src]

Create a borrowed CsVec over slice data without checking the structure This is unsafe because algorithms are free to assume that properties guaranteed by check_structure are enforced, and because the lifetime of the pointers is unconstrained. For instance, non out-of-bounds indices can be relied upon to perform unchecked slice access. For safety, lifetime of the resulting vector should match the lifetime of the input pointers.

Trait Implementations

impl<N, IS, DS: Deref<Target = [N]>> VecDim<N> for CsVecBase<IS, DS>
[src]

The dimension of the vector

impl<'a, N: 'a, I: 'a, IS, DS> IntoSparseVecIter<'a, N> for &'a CsVecBase<IS, DS> where
    I: SpIndex,
    IS: Deref<Target = [I]>,
    DS: Deref<Target = [N]>, 
[src]

The dimension of the vector

Important traits for VectorIterator<'a, N, I>

Transform self into an iterator that yields (usize, &N) tuples where the usize is the index of the value in the sparse vector. The indices should be sorted. Read more

Indicator to check whether the vector is actually dense

Random access to an element in the vector. Read more

impl<'a, 'b, N, I, IS1, DS1, IpS2, IS2, DS2> Mul<&'b CsMatBase<N, I, IpS2, IS2, DS2>> for &'a CsVecBase<IS1, DS1> where
    N: 'a + Copy + Num + Default,
    I: 'a + SpIndex,
    IS1: 'a + Deref<Target = [I]>,
    DS1: 'a + Deref<Target = [N]>,
    IpS2: 'b + Deref<Target = [I]>,
    IS2: 'b + Deref<Target = [I]>,
    DS2: 'b + Deref<Target = [N]>, 
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'a, 'b, N, I, IpS1, IS1, DS1, IS2, DS2> Mul<&'b CsVecBase<IS2, DS2>> for &'a CsMatBase<N, I, IpS1, IS1, DS1> where
    N: Copy + Num + Default + Sum,
    I: SpIndex,
    IpS1: Deref<Target = [I]>,
    IS1: Deref<Target = [I]>,
    DS1: Deref<Target = [N]>,
    IS2: Deref<Target = [I]>,
    DS2: Deref<Target = [N]>, 
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<N, I, IS1, DS1, IS2, DS2> Add<CsVecBase<IS2, DS2>> for CsVecBase<IS1, DS1> where
    N: Copy + Num,
    I: SpIndex,
    IS1: Deref<Target = [I]>,
    DS1: Deref<Target = [N]>,
    IS2: Deref<Target = [I]>,
    DS2: Deref<Target = [N]>, 
[src]

The resulting type after applying the + operator.

Performs the + operation.

impl<'a, N, I, IS1, DS1, IS2, DS2> Add<&'a CsVecBase<IS2, DS2>> for CsVecBase<IS1, DS1> where
    N: Copy + Num,
    I: SpIndex,
    IS1: Deref<Target = [I]>,
    DS1: Deref<Target = [N]>,
    IS2: Deref<Target = [I]>,
    DS2: Deref<Target = [N]>, 
[src]

The resulting type after applying the + operator.

Performs the + operation.

impl<'a, N, I, IS1, DS1, IS2, DS2> Add<CsVecBase<IS2, DS2>> for &'a CsVecBase<IS1, DS1> where
    N: Copy + Num,
    I: SpIndex,
    IS1: Deref<Target = [I]>,
    DS1: Deref<Target = [N]>,
    IS2: Deref<Target = [I]>,
    DS2: Deref<Target = [N]>, 
[src]

The resulting type after applying the + operator.

Performs the + operation.

impl<'a, 'b, N, I, IS1, DS1, IS2, DS2> Add<&'b CsVecBase<IS2, DS2>> for &'a CsVecBase<IS1, DS1> where
    N: Copy + Num,
    I: SpIndex,
    IS1: Deref<Target = [I]>,
    DS1: Deref<Target = [N]>,
    IS2: Deref<Target = [I]>,
    DS2: Deref<Target = [N]>, 
[src]

The resulting type after applying the + operator.

Performs the + operation.

impl<'a, 'b, N, IS1, DS1, IS2, DS2> Sub<&'b CsVecBase<IS2, DS2>> for &'a CsVecBase<IS1, DS1> where
    N: Copy + Num,
    IS1: Deref<Target = [usize]>,
    DS1: Deref<Target = [N]>,
    IS2: Deref<Target = [usize]>,
    DS2: Deref<Target = [N]>, 
[src]

The resulting type after applying the - operator.

Performs the - operation.

impl<N, IS, DS> Index<usize> for CsVecBase<IS, DS> where
    IS: Deref<Target = [usize]>,
    DS: Deref<Target = [N]>, 
[src]

The returned type after indexing.

Performs the indexing (container[index]) operation.

impl<N, IS, DS> IndexMut<usize> for CsVecBase<IS, DS> where
    IS: Deref<Target = [usize]>,
    DS: DerefMut<Target = [N]>, 
[src]

Performs the mutable indexing (container[index]) operation.

impl<N, IS, DS> Index<NnzIndex> for CsVecBase<IS, DS> where
    IS: Deref<Target = [usize]>,
    DS: Deref<Target = [N]>, 
[src]

The returned type after indexing.

Performs the indexing (container[index]) operation.

impl<N, IS, DS> IndexMut<NnzIndex> for CsVecBase<IS, DS> where
    IS: Deref<Target = [usize]>,
    DS: DerefMut<Target = [N]>, 
[src]

Performs the mutable indexing (container[index]) operation.

impl<IStorage: PartialEq, DStorage: PartialEq> PartialEq for CsVecBase<IStorage, DStorage>
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<IStorage: Debug, DStorage: Debug> Debug for CsVecBase<IStorage, DStorage>
[src]

Formats the value using the given formatter. Read more

impl<IStorage: Clone, DStorage: Clone> Clone for CsVecBase<IStorage, DStorage>
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Auto Trait Implementations

impl<IStorage, DStorage> Send for CsVecBase<IStorage, DStorage> where
    DStorage: Send,
    IStorage: Send

impl<IStorage, DStorage> Sync for CsVecBase<IStorage, DStorage> where
    DStorage: Sync,
    IStorage: Sync