MRPT  1.9.9
mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL > Struct Template Reference

Detailed Description

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
struct mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >

A templated column-indexed efficient storage of block-sparse Jacobian or Hessian matrices, together with other arbitrary information.

Columns are stored in a non-associative container, but the contents of each column are kept within an std::map<> indexed by row. All submatrix blocks have the same size, which allows dense storage of them in fixed-size matrices, avoiding costly memory allocations.

Template Parameters
NROWSRows in each elementary matrix.
NCOLSCols in each elementary matrix.
INFOType of the extra data fields within each block
HAS_REMAPIs true, an inverse mapping between column indices and "user IDs" is kept.
INDEX_REMAP_MAP_IMPLIgnore if HAS_REMAP=false. Defaults to "mrpt::utils::map_as_vector<size_t,size_t>" for amortized O(1). Can be set to "std::map<size_t,size_t>" in very sparse systems to save memory at the cost of a O(log N) access time when using the remap indices.

Definition at line 40 of file MatrixBlockSparseCols.h.

#include <mrpt/math/MatrixBlockSparseCols.h>

Classes

struct  TEntry
 

Public Types

using matrix_t = Eigen::Matrix< Scalar, NROWS, NCOLS >
 
using symbolic_t = INFO
 
using col_t = mrpt::aligned_std_map< size_t, TEntry >
 Each compressed sparse column. More...
 

Public Member Functions

 MatrixBlockSparseCols ()
 
col_tgetCol (const size_t idx)
 
const col_tgetCol (const size_t idx) const
 
const mrpt::utils::map_as_vector< size_t, size_t > & getColInverseRemappedIndices () const
 
const std::vector< size_t > & getColRemappedIndices () const
 
col_tappendCol (const size_t remapIndex)
 Append one column, returning a ref to the new col_t data. More...
 
void setColCount (const size_t nCols)
 Change the number of columns (keep old contents) More...
 
size_t cols () const
 Get current number of cols. More...
 
void clearColEntries ()
 Clear all the entries in each column (do not change the number of columns, though!) More...
 
void clearAll ()
 Clear all the entries in each column (do not change the number of columns, though!) More...
 
void saveToTextFileAsDense (const std::string &filename, const bool force_symmetry=false, const bool is_col_compressed=true) const
 Builds a dense representation of the matrix and saves to a text file. More...
 
void getAsDense (mrpt::math::CMatrixDouble &D, const bool force_symmetry=false, const bool is_col_compressed=true) const
 Builds a dense representation of the matrix and saves to a text file. More...
 
size_t findCurrentNumberOfRows () const
 Goes over all the columns and keep the largest column length. More...
 
template<class MATRIX >
void getBinaryBlocksRepresentation (MATRIX &out) const
 Builds a binary matrix with 1s where an elementary matrix is stored, 0s elsewhere. More...
 
void copyNumericalValuesFrom (const MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP > &o)
 Clear the current contents of this objects and replicates the sparse structure and numerical values of o. More...
 

Private Attributes

std::deque< col_tcols
 -> cols[i]: i'th column. More...
 
mrpt::utils::map_as_vector< size_t, size_t > col_inverse_remapped_indices
 "remapped index" is the index of some global variable, interpreted by the external user of this class. More...
 
std::vector< size_t > col_remapped_indices
 

Member Typedef Documentation

◆ col_t

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
using mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::col_t = mrpt::aligned_std_map<size_t, TEntry>

Each compressed sparse column.

Definition at line 54 of file MatrixBlockSparseCols.h.

◆ matrix_t

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
using mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::matrix_t = Eigen::Matrix<Scalar, NROWS, NCOLS>

Definition at line 42 of file MatrixBlockSparseCols.h.

◆ symbolic_t

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
using mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::symbolic_t = INFO

Definition at line 43 of file MatrixBlockSparseCols.h.

Constructor & Destructor Documentation

◆ MatrixBlockSparseCols()

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::MatrixBlockSparseCols ( )
inline

Definition at line 68 of file MatrixBlockSparseCols.h.

Member Function Documentation

◆ appendCol()

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
col_t& mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::appendCol ( const size_t  remapIndex)
inline

◆ clearAll()

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
void mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::clearAll ( )
inline

◆ clearColEntries()

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
void mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::clearColEntries ( )
inline

Clear all the entries in each column (do not change the number of columns, though!)

See also
getColCount

Definition at line 106 of file MatrixBlockSparseCols.h.

References mrpt::containers::clear(), and mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::cols().

◆ cols()

◆ copyNumericalValuesFrom()

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
void mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::copyNumericalValuesFrom ( const MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP > &  o)
inline

Clear the current contents of this objects and replicates the sparse structure and numerical values of o.

Definition at line 200 of file MatrixBlockSparseCols.h.

References mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::cols.

◆ findCurrentNumberOfRows()

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
size_t mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::findCurrentNumberOfRows ( ) const
inline

◆ getAsDense()

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
void mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::getAsDense ( mrpt::math::CMatrixDouble D,
const bool  force_symmetry = false,
const bool  is_col_compressed = true 
) const
inline

◆ getBinaryBlocksRepresentation()

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
template<class MATRIX >
void mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::getBinaryBlocksRepresentation ( MATRIX &  out) const
inline

◆ getCol() [1/2]

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
col_t& mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::getCol ( const size_t  idx)
inline

◆ getCol() [2/2]

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
const col_t& mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::getCol ( const size_t  idx) const
inline

◆ getColInverseRemappedIndices()

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
const mrpt::utils::map_as_vector<size_t, size_t>& mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::getColInverseRemappedIndices ( ) const
inline

◆ getColRemappedIndices()

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
const std::vector<size_t>& mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::getColRemappedIndices ( ) const
inline

◆ saveToTextFileAsDense()

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
void mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::saveToTextFileAsDense ( const std::string filename,
const bool  force_symmetry = false,
const bool  is_col_compressed = true 
) const
inline

Builds a dense representation of the matrix and saves to a text file.

Definition at line 124 of file MatrixBlockSparseCols.h.

References mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::getAsDense().

◆ setColCount()

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
void mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::setColCount ( const size_t  nCols)
inline

Change the number of columns (keep old contents)

Definition at line 101 of file MatrixBlockSparseCols.h.

References mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::cols().

Member Data Documentation

◆ col_inverse_remapped_indices

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
mrpt::utils::map_as_vector<size_t, size_t> mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::col_inverse_remapped_indices
private

◆ col_remapped_indices

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
std::vector<size_t> mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::col_remapped_indices
private

◆ cols

template<typename Scalar, int NROWS, int NCOLS, typename INFO, bool HAS_REMAP, typename INDEX_REMAP_MAP_IMPL = mrpt::utils::map_as_vector<size_t, size_t>>
std::deque<col_t> mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::cols
private

-> cols[i]: i'th column.

-> Each column is a map [row] -> TEntry

Definition at line 60 of file MatrixBlockSparseCols.h.

Referenced by mrpt::math::MatrixBlockSparseCols< Scalar, NROWS, NCOLS, INFO, HAS_REMAP, INDEX_REMAP_MAP_IMPL >::copyNumericalValuesFrom().




Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 7d5e6d718 Fri Aug 24 01:51:28 2018 +0200 at lun nov 2 08:35:50 CET 2020