Main MRPT website > C++ reference
MRPT logo
Classes | Private Member Functions | Private Attributes

mrpt::math::CSparseMatrix Class Reference


Detailed Description

A sparse matrix capable of efficient math operations (a wrapper around the CSparse library) The type of cells is fixed to "double".

There are two main formats for the non-zero entries in this matrix:

The latter is the "normal" format, which is expected by most mathematical operations defined in this class. There're two three ways of initializing and populating a sparse matrix:

  1. As a triplet (empty), then add entries, then compress:
                 CSparseMatrix  SM(100,100);
                 SM.insert_entry(i,j, val);  // or
                 SM.insert_submatrix(i,j, MAT); //  ...
                 SM.compressFromTriplet();
    
  2. As a triplet from a CSparseMatrixTemplate<double>:
                 CSparseMatrixTemplate<double>  data;
                 data(row,col) = val;
                 ...
                 CSparseMatrix  SM(data);
    
  3. From an existing dense matrix:

                 CMatrixDouble data(100,100); // or
                 CMatrixFloat  data(100,100); // or
                 CMatrixFixedNumeric<double,4,6>  data; // etc...
                 CSparseMatrix  SM(data);
    

Due to its practical utility, there is a special inner class CSparseMatrix::CholeskyDecomp to handle Cholesky-related methods and data.

Note:
This class was initially adapted from "robotvision", by Hauke Strasdat, Steven Lovegrove and Andrew J. Davison. See http://www.openslam.org/robotvision.html
CSparse is maintained by Timothy Davis: http://people.sc.fsu.edu/~jburkardt/c_src/csparse/csparse.html .
See also his book "Direct methods for sparse linear systems". http://books.google.es/books?id=TvwiyF8vy3EC&pg=PA12&lpg=PA12&dq=cs_compress&source=bl&ots=od9uGJ793j&sig=Wa-fBk4sZkZv3Y0Op8FNH8PvCUs&hl=es&ei=UjA0TJf-EoSmsQay3aXPAw&sa=X&oi=book_result&ct=result&resnum=8&ved=0CEQQ6AEwBw#v=onepage&q&f=false
See also:
mrpt::math::CMatrixFixedNumeric, mrpt::math::CMatrixTemplateNumeric, etc.

Definition at line 100 of file CSparseMatrix.h.

#include <mrpt/math/CSparseMatrix.h>

List of all members.

Classes

class  CholeskyDecomp
 Auxiliary class to hold the results of a Cholesky factorization of a sparse matrix. More...

Public Member Functions

Constructors, destructor & copy operations
 CSparseMatrix (const size_t nRows=0, const size_t nCols=0)
 Create an initially empty sparse matrix, in the "triplet" form.
template<typename T >
 CSparseMatrix (const CSparseMatrixTemplate< T > &data)
 A good way to initialize a sparse matrix from a list of non NULL elements.
template<typename T , size_t N, size_t M>
 CSparseMatrix (const CMatrixFixedNumeric< T, N, M > &MAT)
 Constructor from a dense matrix of any kind existing in MRPT, creating a "column-compressed" sparse matrix.
template<typename T >
 CSparseMatrix (const CMatrixTemplateNumeric< T > &MAT)
 Constructor from a dense matrix of any kind existing in MRPT, creating a "column-compressed" sparse matrix.
 CSparseMatrix (const CSparseMatrix &other)
 Copy constructor.
 CSparseMatrix (const cs *const sm)
 Copy constructor from an existing "cs" CSparse data structure.
virtual ~CSparseMatrix ()
 Destructor.
void operator= (const CSparseMatrix &other)
 Copy operator from another existing object.
void clear ()
 Erase all previous contents and leave the matrix as a "triplet" 1x1 matrix without any data.
Math operations (the interesting stuff...)
void add_AB (const CSparseMatrix &A, const CSparseMatrix &B)
 this = A+B
void multiply_AB (const CSparseMatrix &A, const CSparseMatrix &B)
 this = A*B
void multiply_Ab (const mrpt::vector_double &b, mrpt::vector_double &out_res) const
 out_res = this * b
CSparseMatrix operator+ (const CSparseMatrix &other) const
CSparseMatrix operator* (const CSparseMatrix &other) const
mrpt::vector_double operator* (const mrpt::vector_double &other) const
void operator+= (const CSparseMatrix &other)
void operator*= (const CSparseMatrix &other)
CSparseMatrix transpose () const

Private Member Functions

template<class MATRIX >
void construct_from_mrpt_mat (const MATRIX &C)
 Initialization from a dense matrix of any kind existing in MRPT.
void construct_from_triplet (const cs &triplet)
 Initialization from a triplet "cs", which is first compressed.
void construct_from_existing_cs (const cs &sm)
 To be called by constructors only, assume previous pointers are trash and overwrite them.
void internal_free_mem ()
 free buffers (deallocate the memory of the i,p,x buffers)
void copy (const cs *const sm)
 Copy the data from an existing "cs" CSparse data structure.
void copy_fast (cs *const sm)
 Fast copy the data from an existing "cs" CSparse data structure, copying the pointers and leaving NULLs in the source structure.

Private Attributes

cs sparse_matrix

void insert_entry (const size_t row, const size_t col, const double val)
 @ Access the matrix, get, set elements, etc.
void insert_entry_fast (const size_t row, const size_t col, const double val)
 ONLY for TRIPLET matrices: Insert an element into a "cs", without checking if the matrix is in Triplet format and without extending the matrix extension/limits if (row,col) is out of the current size.
template<class MATRIX >
void insert_submatrix (const size_t row, const size_t col, const MATRIX &M)
 ONLY for TRIPLET matrices: insert a given matrix (in any of the MRPT formats) at a given location of the sparse matrix.
void compressFromTriplet ()
 ONLY for TRIPLET matrices: convert the matrix in a column-compressed form.
void get_dense (CMatrixDouble &outMat) const
 Return a dense representation of the sparse matrix.
bool saveToTextFile_dense (const std::string &filName)
 save as a dense matrix to a text file
size_t getRowCount () const
size_t getColCount () const
void setRowCount (const size_t nRows)
 Change the number of rows in the matrix (can't be lower than current size)
void setColCount (const size_t nCols)
bool isTriplet () const
 Returns true if this sparse matrix is in "triplet" form.
bool isColumnCompressed () const
 Returns true if this sparse matrix is in "column compressed" form.
static void cs2dense (const cs &SM, CMatrixDouble &outMat)
 Static method to convert a "cs" structure into a dense representation of the sparse matrix.

Constructor & Destructor Documentation

mrpt::math::CSparseMatrix::CSparseMatrix ( const size_t  nRows = 0,
const size_t  nCols = 0 
)

Create an initially empty sparse matrix, in the "triplet" form.

Notice that you must call "compressFromTriplet" after populating the matrix and before using the math operatons on this matrix. The initial size can be later on extended with insert_entry() or setRowCount() & setColCount().

See also:
insert_entry, setRowCount, setColCount
template<typename T >
mrpt::math::CSparseMatrix::CSparseMatrix ( const CSparseMatrixTemplate< T > &  data ) [inline]

A good way to initialize a sparse matrix from a list of non NULL elements.

This constructor takes all the non-zero entries in "data" and builds a column-compressed sparse representation.

Definition at line 170 of file CSparseMatrix.h.

References ASSERTMSG_, mrpt::math::CSparseMatrixTemplate< T >::begin(), mrpt::math::CSparseMatrixTemplate< T >::empty(), mrpt::math::CSparseMatrixTemplate< T >::end(), mrpt::math::CSparseMatrixTemplate< T >::getColCount(), mrpt::math::CSparseMatrixTemplate< T >::getRowCount(), and insert_entry_fast().

template<typename T , size_t N, size_t M>
mrpt::math::CSparseMatrix::CSparseMatrix ( const CMatrixFixedNumeric< T, N, M > &  MAT ) [inline, explicit]

Constructor from a dense matrix of any kind existing in MRPT, creating a "column-compressed" sparse matrix.

Definition at line 191 of file CSparseMatrix.h.

template<typename T >
mrpt::math::CSparseMatrix::CSparseMatrix ( const CMatrixTemplateNumeric< T > &  MAT ) [inline, explicit]

Constructor from a dense matrix of any kind existing in MRPT, creating a "column-compressed" sparse matrix.

Definition at line 194 of file CSparseMatrix.h.

mrpt::math::CSparseMatrix::CSparseMatrix ( const CSparseMatrix other )

Copy constructor.

mrpt::math::CSparseMatrix::CSparseMatrix ( const cs *const   sm ) [explicit]

Copy constructor from an existing "cs" CSparse data structure.

virtual mrpt::math::CSparseMatrix::~CSparseMatrix (  ) [virtual]

Destructor.


Member Function Documentation

void mrpt::math::CSparseMatrix::add_AB ( const CSparseMatrix A,
const CSparseMatrix B 
)

this = A+B

Referenced by operator+().

void mrpt::math::CSparseMatrix::clear (  )

Erase all previous contents and leave the matrix as a "triplet" 1x1 matrix without any data.

void mrpt::math::CSparseMatrix::compressFromTriplet (  )

ONLY for TRIPLET matrices: convert the matrix in a column-compressed form.

See also:
insert_entry
void mrpt::math::CSparseMatrix::construct_from_existing_cs ( const cs sm ) [private]

To be called by constructors only, assume previous pointers are trash and overwrite them.

template<class MATRIX >
void mrpt::math::CSparseMatrix::construct_from_mrpt_mat ( const MATRIX &  C ) [inline, private]

Initialization from a dense matrix of any kind existing in MRPT.

Definition at line 107 of file CSparseMatrix.h.

References cs_sparse::m, and mrpt::system::os::memcpy().

void mrpt::math::CSparseMatrix::construct_from_triplet ( const cs triplet ) [private]

Initialization from a triplet "cs", which is first compressed.

void mrpt::math::CSparseMatrix::copy ( const cs *const   sm ) [private]

Copy the data from an existing "cs" CSparse data structure.

void mrpt::math::CSparseMatrix::copy_fast ( cs *const   sm ) [private]

Fast copy the data from an existing "cs" CSparse data structure, copying the pointers and leaving NULLs in the source structure.

static void mrpt::math::CSparseMatrix::cs2dense ( const cs SM,
CMatrixDouble outMat 
) [static]

Static method to convert a "cs" structure into a dense representation of the sparse matrix.

void mrpt::math::CSparseMatrix::get_dense ( CMatrixDouble outMat ) const

Return a dense representation of the sparse matrix.

See also:
saveToTextFile_dense
size_t mrpt::math::CSparseMatrix::getColCount (  ) const [inline]

Definition at line 302 of file CSparseMatrix.h.

size_t mrpt::math::CSparseMatrix::getRowCount (  ) const [inline]

Definition at line 301 of file CSparseMatrix.h.

void mrpt::math::CSparseMatrix::insert_entry ( const size_t  row,
const size_t  col,
const double  val 
)

@ Access the matrix, get, set elements, etc.

ONLY for TRIPLET matrices: insert a new non-zero entry in the matrix. This method cannot be used once the matrix is in column-compressed form. The size of the matrix will be automatically extended if the indices are out of the current limits.

See also:
isTriplet, compressFromTriplet
void mrpt::math::CSparseMatrix::insert_entry_fast ( const size_t  row,
const size_t  col,
const double  val 
)

ONLY for TRIPLET matrices: Insert an element into a "cs", without checking if the matrix is in Triplet format and without extending the matrix extension/limits if (row,col) is out of the current size.

Referenced by CSparseMatrix().

template<class MATRIX >
void mrpt::math::CSparseMatrix::insert_submatrix ( const size_t  row,
const size_t  col,
const MATRIX &  M 
) [inline]

ONLY for TRIPLET matrices: insert a given matrix (in any of the MRPT formats) at a given location of the sparse matrix.

This method cannot be used once the matrix is in column-compressed form. The size of the matrix will be automatically extended if the indices are out of the current limits. Since this is inline, it can be very efficient for fixed-size MRPT matrices.

See also:
isTriplet, compressFromTriplet, insert_entry

Definition at line 268 of file CSparseMatrix.h.

References THROW_EXCEPTION.

void mrpt::math::CSparseMatrix::internal_free_mem (  ) [private]

free buffers (deallocate the memory of the i,p,x buffers)

bool mrpt::math::CSparseMatrix::isColumnCompressed (  ) const [inline]

Returns true if this sparse matrix is in "column compressed" form.

See also:
isTriplet

Definition at line 312 of file CSparseMatrix.h.

bool mrpt::math::CSparseMatrix::isTriplet (  ) const [inline]

Returns true if this sparse matrix is in "triplet" form.

See also:
isColumnCompressed

Definition at line 309 of file CSparseMatrix.h.

void mrpt::math::CSparseMatrix::multiply_AB ( const CSparseMatrix A,
const CSparseMatrix B 
)

this = A*B

Referenced by operator*().

void mrpt::math::CSparseMatrix::multiply_Ab ( const mrpt::vector_double b,
mrpt::vector_double out_res 
) const

out_res = this * b

CSparseMatrix mrpt::math::CSparseMatrix::operator* ( const CSparseMatrix other ) const [inline]

Definition at line 226 of file CSparseMatrix.h.

References multiply_AB().

mrpt::vector_double mrpt::math::CSparseMatrix::operator* ( const mrpt::vector_double other ) const [inline]

Definition at line 232 of file CSparseMatrix.h.

References multiply_Ab().

void mrpt::math::CSparseMatrix::operator*= ( const CSparseMatrix other ) [inline]

Definition at line 240 of file CSparseMatrix.h.

References multiply_AB().

CSparseMatrix mrpt::math::CSparseMatrix::operator+ ( const CSparseMatrix other ) const [inline]

Definition at line 220 of file CSparseMatrix.h.

References add_AB().

void mrpt::math::CSparseMatrix::operator+= ( const CSparseMatrix other ) [inline]

Definition at line 237 of file CSparseMatrix.h.

void mrpt::math::CSparseMatrix::operator= ( const CSparseMatrix other )

Copy operator from another existing object.

bool mrpt::math::CSparseMatrix::saveToTextFile_dense ( const std::string &  filName )

save as a dense matrix to a text file

Returns:
False on any error.
void mrpt::math::CSparseMatrix::setColCount ( const size_t  nCols ) [inline]

Definition at line 306 of file CSparseMatrix.h.

References ASSERT_.

void mrpt::math::CSparseMatrix::setRowCount ( const size_t  nRows ) [inline]

Change the number of rows in the matrix (can't be lower than current size)

Definition at line 305 of file CSparseMatrix.h.

References ASSERT_.

CSparseMatrix mrpt::math::CSparseMatrix::transpose (  ) const

Member Data Documentation

Definition at line 103 of file CSparseMatrix.h.




Page generated by Doxygen 1.7.2 for MRPT 0.9.4 SVN: at Mon Jan 10 22:30:30 UTC 2011