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

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

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

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

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

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

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

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

Returns true if the length of the vector is 0.

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

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

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

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

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

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

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

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

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

Returns a view over the vector.

Returns a slice of the non trivial positions.

Returns an owned version of the vector.

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

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

Returns a json string for the vector.

Trait Implementations

The resulting type after applying the + operator.

Performs the + operation. Read more

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Deserialize this value from the given Serde deserializer. Read more

Formats the value using the given formatter. Read more

Feeds this value into the given Hasher. Read more

Feeds a slice of this type into the given Hasher. Read more

The resulting type after applying the * operator.

Performs the * operation. Read more

The resulting type after applying the * operator.

Performs the * operation. Read more

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

This method tests for !=.

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

Converts the given value to a String. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.