Struct sparse_bin_mat::SparseBinVecBase[][src]

pub struct SparseBinVecBase<T> { /* fields omitted */ }

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

impl SparseBinVecBase<Vec<usize, Global>>[src]

pub fn zeros(length: usize) -> Self[src]

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);

pub fn empty() -> Self[src]

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);

pub fn to_positions_vec(self) -> Vec<usize>[src]

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]);

impl<T: Deref<Target = [usize]>> SparseBinVecBase<T>[src]

pub fn new(length: usize, positions: T) -> Self[src]

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);

pub fn try_new(length: usize, positions: T) -> Result<Self, InvalidPositions>[src]

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));

pub fn len(&self) -> usize[src]

Returns the length (number of elements) of the vector.

pub fn weight(&self) -> usize[src]

Returns the number of elements with value 1 in the vector.

pub fn is_empty(&self) -> bool[src]

Returns true if the length of the vector is 0.

pub fn is_zero(&self) -> bool[src]

Returns true if all the element in the vector are 0.

pub fn get(&self, position: usize) -> Option<u8>[src]

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_eq!(vector.get(0), Some(1));
assert_eq!(vector.get(1), Some(0));
assert_eq!(vector.get(2), Some(1));
assert_eq!(vector.get(3), None);

pub fn is_zero_at(&self, position: usize) -> Option<bool>[src]

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);

pub fn is_one_at(&self, position: usize) -> Option<bool>[src]

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);

pub fn non_trivial_positions<'a>(&'a self) -> NonTrivialPositions<'a>

Notable traits for NonTrivialPositions<'vec>

impl<'vec> Iterator for NonTrivialPositions<'vec> type Item = usize;
[src]

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);

pub fn concat(&self, other: &Self) -> SparseBinVec[src]

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);

pub fn keep_only_positions(
    &self,
    positions: &[usize]
) -> Result<SparseBinVec, InvalidPositions>
[src]

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));

pub fn without_positions(
    &self,
    positions: &[usize]
) -> Result<SparseBinVec, InvalidPositions>
[src]

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));

pub fn as_view(&self) -> SparseBinSlice<'_>[src]

Returns a view over the vector.

pub fn as_slice(&self) -> &[usize][src]

Returns a slice of the non trivial positions.

pub fn to_owned(self) -> SparseBinVec[src]

Returns an owned version of the vector.

pub fn dot_with<S: Deref<Target = [usize]>>(
    &self,
    other: &SparseBinVecBase<S>
) -> Result<u8, IncompatibleDimensions<usize, usize>>
[src]

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));
assert_eq!(first.dot_with(&third), Ok((1)));

pub fn bitwise_xor_with<S: Deref<Target = [usize]>>(
    &self,
    other: &SparseBinVecBase<S>
) -> Result<SparseBinVec, IncompatibleDimensions<usize, usize>>
[src]

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

impl<S, T> Add<&'_ SparseBinVecBase<S>> for &SparseBinVecBase<T> where
    S: Deref<Target = [usize]>,
    T: Deref<Target = [usize]>, 
[src]

type Output = SparseBinVec

The resulting type after applying the + operator.

impl<T: Clone> Clone for SparseBinVecBase<T>[src]

impl<T: Debug> Debug for SparseBinVecBase<T>[src]

impl<T: Deref<Target = [usize]>> Display for SparseBinVecBase<T>[src]

impl<T: Eq> Eq for SparseBinVecBase<T>[src]

impl<T: Hash> Hash for SparseBinVecBase<T>[src]

impl<S, T> Mul<&'_ SparseBinVecBase<S>> for &SparseBinVecBase<T> where
    S: Deref<Target = [usize]>,
    T: Deref<Target = [usize]>, 
[src]

type Output = u8

The resulting type after applying the * operator.

impl<T: Deref<Target = [usize]>> Mul<&'_ SparseBinVecBase<T>> for &SparseBinMat[src]

type Output = SparseBinVec

The resulting type after applying the * operator.

impl<T: PartialEq> PartialEq<SparseBinVecBase<T>> for SparseBinVecBase<T>[src]

impl<T> StructuralEq for SparseBinVecBase<T>[src]

impl<T> StructuralPartialEq for SparseBinVecBase<T>[src]

Auto Trait Implementations

impl<T> RefUnwindSafe for SparseBinVecBase<T> where
    T: RefUnwindSafe
[src]

impl<T> Send for SparseBinVecBase<T> where
    T: Send
[src]

impl<T> Sync for SparseBinVecBase<T> where
    T: Sync
[src]

impl<T> Unpin for SparseBinVecBase<T> where
    T: Unpin
[src]

impl<T> UnwindSafe for SparseBinVecBase<T> where
    T: UnwindSafe
[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.