Trait sprs::sparse::vec::SparseIterTools
[−]
[src]
pub trait SparseIterTools: Iterator {
fn nnz_or_zip<I, N1: Copy, N2: Copy>(self, other: I) -> NnzOrZip<Self, I::IntoIter, N1, N2> where Self: Iterator<Item=(usize, N1)> + Sized, I: IntoIterator<Item=(usize, N2)> { ... }
fn nnz_zip<I, N1: Copy, N2: Copy>(self, other: I) -> FilterMap<NnzOrZip<Self, I::IntoIter, N1, N2>, fn(NnzEither<N1, N2>) -> Option<(usize, N1, N2)>> where Self: Iterator<Item=(usize, N1)> + Sized, I: IntoIterator<Item=(usize, N2)> { ... }
}
Provided Methods
fn nnz_or_zip<I, N1: Copy, N2: Copy>(self, other: I) -> NnzOrZip<Self, I::IntoIter, N1, N2> where Self: Iterator<Item=(usize, N1)> + Sized, I: IntoIterator<Item=(usize, N2)>
Iterate over non-zero elements of either of two vectors. This is useful for implementing eg addition of vectors.
Example
use sprs::CsVec; use sprs::sparse::vec::NnzEither; use sprs::sparse::vec::SparseIterTools; let v0 = CsVec::new_owned(5, vec![0, 2, 4], vec![1., 2., 3.]).unwrap(); let v1 = CsVec::new_owned(5, vec![1, 2, 3], vec![-1., -2., -3.] ).unwrap(); let mut nnz_or_iter = v0.iter().nnz_or_zip(v1.iter()); assert_eq!(nnz_or_iter.next(), Some(NnzEither::Left((0, 1.)))); assert_eq!(nnz_or_iter.next(), Some(NnzEither::Right((1, -1.)))); assert_eq!(nnz_or_iter.next(), Some(NnzEither::Both((2, 2., -2.)))); assert_eq!(nnz_or_iter.next(), Some(NnzEither::Right((3, -3.)))); assert_eq!(nnz_or_iter.next(), Some(NnzEither::Left((4, 3.)))); assert_eq!(nnz_or_iter.next(), None);
fn nnz_zip<I, N1: Copy, N2: Copy>(self, other: I) -> FilterMap<NnzOrZip<Self, I::IntoIter, N1, N2>, fn(NnzEither<N1, N2>) -> Option<(usize, N1, N2)>> where Self: Iterator<Item=(usize, N1)> + Sized, I: IntoIterator<Item=(usize, N2)>
Iterate over the matching non-zero elements of both vectors Useful for vector dot product.
Example
use sprs::CsVec; use sprs::sparse::vec::SparseIterTools; let v0 = CsVec::new_owned(5, vec![0, 2, 4], vec![1., 2., 3.]).unwrap(); let v1 = CsVec::new_owned(5, vec![1, 2, 3], vec![-1., -2., -3.] ).unwrap(); let mut nnz_zip = v0.iter().nnz_zip(v1.iter()); assert_eq!(nnz_zip.next(), Some((2, 2., -2.))); assert_eq!(nnz_zip.next(), None);
Implementors
impl<T: Iterator> SparseIterTools for Enumerate<T> where T::Item: Copyimpl<'a, N: 'a + Copy> SparseIterTools for VectorIterator<'a, N>