Template Class SparseVector

Class Documentation

template<typename TV, typename TI = size_t>
class SparseVector

Public Types

using val_type = TV
using tmp_type = std::vector<key_type>

Public Functions

inline void sort()
inline SparseVector()
inline SparseVector(const std::vector<key_type> &indval)
inline SparseVector(const std::vector<TI> &ind, const std::vector<TV> &val)
template<typename TI2>
inline SparseVector(const SparseVector<int, TI2> &other)
inline SparseVector(const std::vector<std::tuple<size_t, int>> &ival)
template<typename IT1, typename IT2>
inline SparseVector(IT1 indit, IT2 valit, size_t n)
inline SparseVector(const TI i, const TV v = TV(1))
inline SparseVector(const TV a, const TI m)

constructor that fills vector with m copies of a

inline SparseVector(std::initializer_list<TI> ind, std::initializer_list<TV> val)

constructor for initializer lists

Parameters
  • ind – nonzero indices

  • val – nonzero values

inline SparseVector(std::string &line)
inline SparseVector shift_inds(TI shift) const
template<typename T>
inline bool operator==(const T &other) const
template<typename T>
inline bool operator!=(const T &other) const
template<typename T>
inline SparseVector operator[](const T &indset) const
inline auto nzbegin() const
inline auto nzend() const
inline auto nzbegin()
inline auto nzend()
inline void clear()
inline void clear_dealloc()
inline void clear_zeros()
inline void clear_inds(const std::vector<bool> &c)

clear indices marked true in c i.e. remove entry i if c[i] is true

inline void clear_inds(const std::vector<bool> &c, std::vector<key_type> &tmp)
inline size_t nnz() const
inline std::vector<size_t> nzinds() const
inline std::vector<TV> nzvals() const
inline std::tuple<std::vector<size_t>, std::vector<TV>> nzs() const
inline auto lower_bound(const TI &i)
inline auto lower_bound(const TI &i) const
inline auto upper_bound(const TI &i)
inline auto upper_bound(const TI &i) const
template<typename itT>
inline auto replace(itT &it, const key_type &k)
template<typename itT>
inline auto replace(itT &it, const TI ind, const TV val)
template<typename itT>
inline auto replace(itT &it, const TV val)
inline TV getval(const size_t i) const
inline TV operator[](size_t i) const
inline auto emplace_back(const key_type &k)
inline auto emplace_back(TI ind, TV val)
inline auto find_last_nz(TI i)
inline const key_type &lastnz() const
inline const key_type &firstnz() const
inline void permute(const std::vector<size_t> &perm)
inline void ipermute(const std::vector<size_t> &perm)
inline SparseVector subvector(const std::vector<size_t> &pind) const
inline SparseVector block(const size_t i0, const size_t i1) const
inline void set_block(const size_t i0, const size_t i1, const SparseVector &b)
inline void J(const size_t m)
inline void swap_rows(const size_t i, const size_t j)
inline void scale_inplace(const TI i, const TV &c)
inline void erase_last_row_of_matrix(const TI i)
inline void erase_for_matrix(const TI i)
inline void mix_rows(const size_t i, const size_t j, const TV &a, const TV &b, const TV &c, const TV &d)
inline void insert_rows(const std::vector<size_t> &r_inds)

insert row indices at specified locations assumes that list of rows is in sorted order

template<class SVT>
inline size_t nnz_intersection(const SVT &x) const

calculate the number of non-zeros common to two vectors

Parameters

x – sparse vector for comparison

Returns

ct number of non-zeros common to both this vector and x

template<class SVT>
inline void coeff_intersection(const SVT &x, std::map<TV, size_t> &ct) const

calculate the number of non-zeros common with c * x where c ranges over any possible value

Parameters
  • x – sparse vector for comparison

  • ct – map from coefficient c to number of identical nonzeros with c*x ct is not cleared in the function.

template<class SVT>
inline void axpy(const TV &a, const SVT &x, std::vector<key_type> &tmp)
template<class SVT>
inline void axpy(const TV &a, const SVT &x)
inline SparseVector operator+(const SparseVector &other) const
inline SparseVector operator*(const TV a) const

scalar multiplication

inline TV operator*(const SparseVector &x) const

dot product

template<class SVT>
inline void axpy(const TV &a, const SVT &x, const TI &firstind, const TI &lastind, std::vector<key_type> &tmp)
template<class SVT>
inline void axpy(const SVT &x, const std::vector<TV> &coeff, const std::vector<TI> &inds, std::vector<key_type> &tmp)
inline void scale_inplace(const std::vector<TV> &coeff)
inline void scale_inplace(const TV c)
inline SparseVector scale(const TV c) const
inline void print() const
inline void print_row() const
template<typename IO>
inline void write(IO &io) const
inline std::string str()
inline SparseVector kron(const SparseVector &other, size_t m) const
inline SparseVector tensor(const SparseVector &other, size_t m) const

Public Static Functions

static inline SparseVector random(size_t n, double p, int maxval, std::default_random_engine &generator)
static inline SparseVector random(size_t n, double p, int maxval)