pub struct SparseBinVecBase<T> { /* private fields */ }
Expand description
A sparse binary vector.
There are two main variants of a vector,
the owned one, SparseBinVec
, and the borrowed one,
SparseBinSlice
.
Most of the time, you want to create a owned version.
However, some iterators, such as those defined on SparseBinMat
returns the borrowed version.
Implementations§
Source§impl SparseBinVecBase<Vec<usize>>
impl SparseBinVecBase<Vec<usize>>
Sourcepub fn zeros(length: usize) -> Self
pub fn zeros(length: usize) -> Self
Creates a vector fill with zeros of the given length.
§Example
let vector = SparseBinVec::zeros(3);
assert_eq!(vector.len(), 3);
assert_eq!(vector.weight(), 0);
Sourcepub fn empty() -> Self
pub fn empty() -> Self
Creates an empty vector.
This allocate minimally, so it is a good placeholder.
§Example
let vector = SparseBinVec::empty();
assert_eq!(vector.len(), 0);
assert_eq!(vector.weight(), 0);
Sourcepub fn to_positions_vec(self) -> Vec<usize>
pub fn to_positions_vec(self) -> Vec<usize>
Converts the sparse binary vector to a Vec
of
the non trivial positions.
§Example
let vector = SparseBinVec::new(3, vec![0, 2]);
assert_eq!(vector.to_positions_vec(), vec![0, 2]);
Source§impl<T: Deref<Target = [usize]>> SparseBinVecBase<T>
impl<T: Deref<Target = [usize]>> SparseBinVecBase<T>
Sourcepub fn new(length: usize, positions: T) -> Self
pub fn new(length: usize, positions: T) -> Self
Creates a new vector with the given length and list of non trivial positions.
§Example
use sparse_bin_mat::error::InvalidPositions;
let vector = SparseBinVec::new(5, vec![0, 2]);
assert_eq!(vector.len(), 5);
assert_eq!(vector.weight(), 2);
Sourcepub fn try_new(length: usize, positions: T) -> Result<Self, InvalidPositions>
pub fn try_new(length: usize, positions: T) -> Result<Self, InvalidPositions>
Creates a new vector with the given length and list of non trivial positions or returns as error if the positions are unsorted, greater or equal to length or contain duplicates.
§Example
use sparse_bin_mat::error::InvalidPositions;
let vector = SparseBinVec::try_new(5, vec![0, 2]);
assert_eq!(vector, Ok(SparseBinVec::new(5, vec![0, 2])));
let vector = SparseBinVec::try_new(5, vec![2, 0]);
assert_eq!(vector, Err(InvalidPositions::Unsorted));
let vector = SparseBinVec::try_new(5, vec![0, 10]);
assert_eq!(vector, Err(InvalidPositions::OutOfBound));
let vector = SparseBinVec::try_new(5, vec![0, 0]);
assert_eq!(vector, Err(InvalidPositions::Duplicated));
Sourcepub fn get(&self, position: usize) -> Option<BinNum>
pub fn get(&self, position: usize) -> Option<BinNum>
Returns the value at the given position or None if the position is out of bound.
§Example
let vector = SparseBinVec::new(3, vec![0, 2]);
assert!(vector.get(0).unwrap().is_one());
assert!(vector.get(1).unwrap().is_zero());
assert!(vector.get(2).unwrap().is_one());
assert!(vector.get(3).is_none());
Sourcepub fn is_zero_at(&self, position: usize) -> Option<bool>
pub fn is_zero_at(&self, position: usize) -> Option<bool>
Returns true if the value at the given position is 0 or None if the position is out of bound.
§Example
let vector = SparseBinVec::new(3, vec![0, 2]);
assert_eq!(vector.is_zero_at(0), Some(false));
assert_eq!(vector.is_zero_at(1), Some(true));
assert_eq!(vector.is_zero_at(2), Some(false));
assert_eq!(vector.is_zero_at(3), None);
Sourcepub fn is_one_at(&self, position: usize) -> Option<bool>
pub fn is_one_at(&self, position: usize) -> Option<bool>
Returns true if the value at the given position is 1 or None if the position is out of bound.
§Example
let vector = SparseBinVec::new(3, vec![0, 2]);
assert_eq!(vector.is_one_at(0), Some(true));
assert_eq!(vector.is_one_at(1), Some(false));
assert_eq!(vector.is_one_at(2), Some(true));
assert_eq!(vector.is_one_at(3), None);
Sourcepub fn non_trivial_positions<'a>(&'a self) -> NonTrivialPositions<'a> ⓘ
pub fn non_trivial_positions<'a>(&'a self) -> NonTrivialPositions<'a> ⓘ
Returns an iterator over all positions where the value is 1.
§Example
let vector = SparseBinVec::new(5, vec![0, 1, 3]);
let mut iter = vector.non_trivial_positions();
assert_eq!(iter.next(), Some(0));
assert_eq!(iter.next(), Some(1));
assert_eq!(iter.next(), Some(3));
assert_eq!(iter.next(), None);
Sourcepub fn iter_dense<'a>(&'a self) -> IterDense<'a, T>
pub fn iter_dense<'a>(&'a self) -> IterDense<'a, T>
Returns an iterator over all value in the vector.
§Example
let vector = SparseBinVec::new(4, vec![0, 2]);
let mut iter = vector.iter_dense();
assert_eq!(iter.next(), Some(BinNum::one()));
assert_eq!(iter.next(), Some(BinNum::zero()));
assert_eq!(iter.next(), Some(BinNum::one()));
assert_eq!(iter.next(), Some(BinNum::zero()));
assert_eq!(iter.next(), None);
Sourcepub fn concat(&self, other: &Self) -> SparseBinVec
pub fn concat(&self, other: &Self) -> SparseBinVec
Returns the concatenation of two vectors.
§Example
let left_vector = SparseBinVec::new(3, vec![0, 1]);
let right_vector = SparseBinVec::new(4, vec![2, 3]);
let concatened = left_vector.concat(&right_vector);
let expected = SparseBinVec::new(7, vec![0, 1, 5, 6]);
assert_eq!(concatened, expected);
Sourcepub fn keep_only_positions(
&self,
positions: &[usize],
) -> Result<SparseBinVec, InvalidPositions>
pub fn keep_only_positions( &self, positions: &[usize], ) -> Result<SparseBinVec, InvalidPositions>
Returns a new vector keeping only the given positions or an error if the positions are unsorted, out of bound or contain deplicate.
Positions are relabeled to the fit new number of positions.
§Example
use sparse_bin_mat::SparseBinVec;
let vector = SparseBinVec::new(5, vec![0, 2, 4]);
let truncated = SparseBinVec::new(3, vec![0, 2]);
assert_eq!(vector.keep_only_positions(&[0, 1, 2]), Ok(truncated));
assert_eq!(vector.keep_only_positions(&[1, 2]).map(|vec| vec.len()), Ok(2));
Sourcepub fn without_positions(
&self,
positions: &[usize],
) -> Result<SparseBinVec, InvalidPositions>
pub fn without_positions( &self, positions: &[usize], ) -> Result<SparseBinVec, InvalidPositions>
Returns a truncated vector where the given positions are remove or an error if the positions are unsorted or out of bound.
Positions are relabeled to fit the new number of positions.
§Example
let vector = SparseBinVec::new(5, vec![0, 2, 4]);
let truncated = SparseBinVec::new(3, vec![0, 2]);
assert_eq!(vector.without_positions(&[3, 4]), Ok(truncated));
assert_eq!(vector.without_positions(&[1, 2]).map(|vec| vec.len()), Ok(3));
Sourcepub fn as_view(&self) -> SparseBinSlice<'_>
pub fn as_view(&self) -> SparseBinSlice<'_>
Returns a view over the vector.
Sourcepub fn to_vec(self) -> SparseBinVec
pub fn to_vec(self) -> SparseBinVec
Returns an owned version of the vector.
Sourcepub fn dot_with<S: Deref<Target = [usize]>>(
&self,
other: &SparseBinVecBase<S>,
) -> Result<BinNum, IncompatibleDimensions<usize, usize>>
pub fn dot_with<S: Deref<Target = [usize]>>( &self, other: &SparseBinVecBase<S>, ) -> Result<BinNum, IncompatibleDimensions<usize, usize>>
Returns the dot product of two vectors or an error if the vectors have different length.
§Example
let first = SparseBinVec::new(4, vec![0, 1, 2]);
let second = SparseBinVec::new(4, vec![1, 2, 3]);
let third = SparseBinVec::new(4, vec![0, 3]);
assert_eq!(first.dot_with(&second), Ok(0.into()));
assert_eq!(first.dot_with(&third), Ok((1.into())));
Sourcepub fn bitwise_xor_with<S: Deref<Target = [usize]>>(
&self,
other: &SparseBinVecBase<S>,
) -> Result<SparseBinVec, IncompatibleDimensions<usize, usize>>
pub fn bitwise_xor_with<S: Deref<Target = [usize]>>( &self, other: &SparseBinVecBase<S>, ) -> Result<SparseBinVec, IncompatibleDimensions<usize, usize>>
Returns the bitwise xor of two vectors or an error if the vectors have different length.
Use the Add (+) operator if you want a version that panics instead or returning an error.
§Example
let first = SparseBinVec::new(4, vec![0, 1, 2]);
let second = SparseBinVec::new(4, vec![1, 2, 3]);
let third = SparseBinVec::new(4, vec![0, 3]);
assert_eq!(first.bitwise_xor_with(&second), Ok(third));
Trait Implementations§
Source§impl<S, T> Add<&SparseBinVecBase<S>> for &SparseBinVecBase<T>
impl<S, T> Add<&SparseBinVecBase<S>> for &SparseBinVecBase<T>
Source§impl<T: Clone> Clone for SparseBinVecBase<T>
impl<T: Clone> Clone for SparseBinVecBase<T>
Source§fn clone(&self) -> SparseBinVecBase<T>
fn clone(&self) -> SparseBinVecBase<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<T: Debug> Debug for SparseBinVecBase<T>
impl<T: Debug> Debug for SparseBinVecBase<T>
Source§impl<'de, T> Deserialize<'de> for SparseBinVecBase<T>where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for SparseBinVecBase<T>where
T: Deserialize<'de>,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<T: Hash> Hash for SparseBinVecBase<T>
impl<T: Hash> Hash for SparseBinVecBase<T>
Source§impl<S, T> Mul<&SparseBinVecBase<S>> for &SparseBinVecBase<T>
impl<S, T> Mul<&SparseBinVecBase<S>> for &SparseBinVecBase<T>
Source§impl<T: Deref<Target = [usize]>> Mul<&SparseBinVecBase<T>> for &SparseBinMat
impl<T: Deref<Target = [usize]>> Mul<&SparseBinVecBase<T>> for &SparseBinMat
Source§fn mul(self, other: &SparseBinVecBase<T>) -> SparseBinVec
fn mul(self, other: &SparseBinVecBase<T>) -> SparseBinVec
*
operation. Read moreSource§impl<T: PartialEq> PartialEq for SparseBinVecBase<T>
impl<T: PartialEq> PartialEq for SparseBinVecBase<T>
Source§impl<T> Serialize for SparseBinVecBase<T>where
T: Serialize,
impl<T> Serialize for SparseBinVecBase<T>where
T: Serialize,
impl<T: Eq> Eq for SparseBinVecBase<T>
impl<T> StructuralPartialEq for SparseBinVecBase<T>
Auto Trait Implementations§
impl<T> Freeze for SparseBinVecBase<T>where
T: Freeze,
impl<T> RefUnwindSafe for SparseBinVecBase<T>where
T: RefUnwindSafe,
impl<T> Send for SparseBinVecBase<T>where
T: Send,
impl<T> Sync for SparseBinVecBase<T>where
T: Sync,
impl<T> Unpin for SparseBinVecBase<T>where
T: Unpin,
impl<T> UnwindSafe for SparseBinVecBase<T>where
T: 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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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 more