Main MRPT website > C++ reference for MRPT 1.5.7
List of all members | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes
mrpt::math::CMatrixTemplate< T > Class Template Reference

Detailed Description

template<class T>
class mrpt::math::CMatrixTemplate< T >

This template class provides the basic functionality for a general 2D any-size, resizable container of numerical or non-numerical elements.

NOTES:

Note
Memory blocks for each row are 16-bytes aligned (since MRPT 0.7.0).
For a complete introduction to Matrices and vectors in MRPT, see: http://www.mrpt.org/Matrices_vectors_arrays_and_Linear_Algebra_MRPT_and_Eigen_classes
See also
CMatrixTemplateNumeric

Definition at line 54 of file CMatrixTemplate.h.

#include <mrpt/math/CMatrixTemplate.h>

Inheritance diagram for mrpt::math::CMatrixTemplate< T >:
Inheritance graph

Public Types

typedef T value_type
 The type of the matrix elements. More...
 
typedef T & reference
 
typedef const T & const_reference
 
typedef std::size_t size_type
 
typedef std::ptrdiff_t difference_type
 

Public Member Functions

template<size_t N>
void ASSERT_ENOUGHROOM (size_t r, size_t c) const
 Checks whether the rows [r-N,r+N] and the columns [c-N,c+N] are present in the matrix. More...
 
void fillAll (const T &val)
 
void swap (CMatrixTemplate< T > &o)
 Swap with another matrix very efficiently (just swaps a pointer and two integer values). More...
 
 CMatrixTemplate (const CMatrixTemplate &m)
 Constructors. More...
 
 CMatrixTemplate (size_t row=1, size_t col=1)
 
 CMatrixTemplate (const CMatrixTemplate &m, const size_t cropRowCount, const size_t cropColCount)
 Copy constructor & crop from another matrix. More...
 
template<typename V , size_t N>
 CMatrixTemplate (size_t row, size_t col, V(&theArray)[N])
 Constructor from a given size and a C array. More...
 
template<typename V >
 CMatrixTemplate (size_t row, size_t col, const V &theVector)
 Constructor from a given size and a STL container (std::vector, std::list,...) with the initial values. More...
 
virtual ~CMatrixTemplate ()
 Destructor. More...
 
CMatrixTemplateoperator= (const CMatrixTemplate &m)
 Assignment operator from another matrix. More...
 
template<typename V , size_t N>
CMatrixTemplateoperator= (V(&theArray)[N])
 Assignment operator for initializing from a C array (The matrix must be set to the correct size before invoking this asignament) More...
 
size_t getRowCount () const
 Number of rows in the matrix. More...
 
size_t getColCount () const
 Number of columns in the matrix. More...
 
CMatrixTemplateSize size () const
 Get a 2-vector with [NROWS NCOLS] (as in MATLAB command size(x)) More...
 
void setSize (size_t row, size_t col, bool zeroNewElements=false)
 Changes the size of matrix, maintaining the previous contents. More...
 
void resize (const CMatrixTemplateSize &siz, bool zeroNewElements=false)
 This method just checks has no effects in this class, but raises an exception if the expected size does not match. More...
 
T & operator() (size_t row, size_t col)
 Subscript operator to get/set individual elements. More...
 
const T & operator() (size_t row, size_t col) const
 Subscript operator to get individual elements. More...
 
T & operator() (size_t ith)
 Subscript operator to get/set an individual element from a row or column matrix. More...
 
operator() (size_t ith) const
 Subscript operator to get/set an individual element from a row or column matrix. More...
 
void set_unsafe (size_t row, size_t col, const T &v)
 Fast but unsafe method to write a value in the matrix. More...
 
const T & get_unsafe (size_t row, size_t col) const
 Fast but unsafe method to read a value from the matrix. More...
 
T & get_unsafe (size_t row, size_t col)
 Fast but unsafe method to get a reference from the matrix. More...
 
T * get_unsafe_row (size_t row)
 Fast but unsafe method to obtain a pointer to a given row of the matrix (Use only in time critical applications) More...
 
const T * get_unsafe_row (size_t row) const
 Fast but unsafe method to obtain a pointer to a given row of the matrix (Use only in critical applications) More...
 
CMatrixTemplate< T > operator() (const size_t row1, const size_t row2, const size_t col1, const size_t col2) const
 Subscript operator to get a submatrix. More...
 
void extractSubmatrix (const size_t row1, const size_t row2, const size_t col1, const size_t col2, CMatrixTemplate< T > &out) const
 Get a submatrix, given its bounds. More...
 
template<class EIGEN_MATRIX >
void extractSubmatrix (const size_t row1, const size_t row2, const size_t col1, const size_t col2, EIGEN_MATRIX &out) const
 
void extractRows (size_t firstRow, size_t lastRow, CMatrixTemplate< T > &out) const
 Gets a series of contiguous rows. More...
 
void extractColumns (size_t firstCol, size_t lastCol, CMatrixTemplate< T > &out) const
 Gets a series of contiguous columns. More...
 
void extractCol (size_t nCol, std::vector< T > &out, int startingRow=0) const
 Returns a given column to a vector (without modifying the matrix) More...
 
void extractCol (size_t nCol, CMatrixTemplate< T > &out, int startingRow=0) const
 Gets a given column to a vector (without modifying the matrix) More...
 
void appendRow (const std::vector< T > &in)
 Appends a new row to the MxN matrix from a 1xN vector. More...
 
void appendCol (const std::vector< T > &in)
 Appends a new column to the matrix from a vector. More...
 
void insertCol (size_t nCol, const std::vector< T > &in)
 Inserts a column from a vector, replacing the current contents of that column. More...
 
void getAsVector (std::vector< T > &out) const
 Returns a vector containing the matrix's values. More...
 

Protected Member Functions

void realloc (size_t row, size_t col, bool newElementsToZero=false)
 Internal use only: It reallocs the memory for the 2D matrix, maintaining the previous contents if posible. More...
 

Protected Attributes

T ** m_Val
 
size_t m_Rows
 
size_t m_Cols
 

Member Typedef Documentation

◆ const_reference

template<class T>
typedef const T& mrpt::math::CMatrixTemplate< T >::const_reference

Definition at line 60 of file CMatrixTemplate.h.

◆ difference_type

Definition at line 62 of file CMatrixTemplate.h.

◆ reference

template<class T>
typedef T& mrpt::math::CMatrixTemplate< T >::reference

Definition at line 59 of file CMatrixTemplate.h.

◆ size_type

template<class T>
typedef std::size_t mrpt::math::CMatrixTemplate< T >::size_type

Definition at line 61 of file CMatrixTemplate.h.

◆ value_type

template<class T>
typedef T mrpt::math::CMatrixTemplate< T >::value_type

The type of the matrix elements.

Definition at line 58 of file CMatrixTemplate.h.

Constructor & Destructor Documentation

◆ CMatrixTemplate() [1/5]

template<class T>
mrpt::math::CMatrixTemplate< T >::CMatrixTemplate ( const CMatrixTemplate< T > &  m)
inline

Constructors.

Definition at line 142 of file CMatrixTemplate.h.

◆ CMatrixTemplate() [2/5]

template<class T>
mrpt::math::CMatrixTemplate< T >::CMatrixTemplate ( size_t  row = 1,
size_t  col = 1 
)
inline

Definition at line 147 of file CMatrixTemplate.h.

◆ CMatrixTemplate() [3/5]

template<class T>
mrpt::math::CMatrixTemplate< T >::CMatrixTemplate ( const CMatrixTemplate< T > &  m,
const size_t  cropRowCount,
const size_t  cropColCount 
)
inline

Copy constructor & crop from another matrix.

Definition at line 154 of file CMatrixTemplate.h.

◆ CMatrixTemplate() [4/5]

template<class T>
template<typename V , size_t N>
mrpt::math::CMatrixTemplate< T >::CMatrixTemplate ( size_t  row,
size_t  col,
V(&)  theArray[N] 
)
inline

Constructor from a given size and a C array.

The array length must match cols x row.

const double numbers[] = {
1,2,3,
4,5,6 };
CMatrixDouble M(3,2, numbers);

Definition at line 173 of file CMatrixTemplate.h.

◆ CMatrixTemplate() [5/5]

template<class T>
template<typename V >
mrpt::math::CMatrixTemplate< T >::CMatrixTemplate ( size_t  row,
size_t  col,
const V &  theVector 
)
inline

Constructor from a given size and a STL container (std::vector, std::list,...) with the initial values.

The vector length must match cols x row.

Definition at line 187 of file CMatrixTemplate.h.

◆ ~CMatrixTemplate()

template<class T>
virtual mrpt::math::CMatrixTemplate< T >::~CMatrixTemplate ( )
inlinevirtual

Destructor.

Definition at line 199 of file CMatrixTemplate.h.

Member Function Documentation

◆ appendCol()

template<class T>
void mrpt::math::CMatrixTemplate< T >::appendCol ( const std::vector< T > &  in)
inline

Appends a new column to the matrix from a vector.

The length of the vector must match the number of rows of the matrix, unless it is (0,0).

Exceptions
std::exceptionOn size mismatch.
See also
extractCol
appendRow

Definition at line 532 of file CMatrixTemplate.h.

◆ appendRow()

template<class T>
void mrpt::math::CMatrixTemplate< T >::appendRow ( const std::vector< T > &  in)
inline

Appends a new row to the MxN matrix from a 1xN vector.

The lenght of the vector must match the width of the matrix, unless it's empty: in that case the matrix is resized to 1xN.

// ...
M.appendRow(v);
M.appendRow(w);
Exceptions
std::exceptionOn incorrect vector length.
See also
extractRow
appendCol

Definition at line 503 of file CMatrixTemplate.h.

◆ ASSERT_ENOUGHROOM()

template<class T>
template<size_t N>
void mrpt::math::CMatrixTemplate< T >::ASSERT_ENOUGHROOM ( size_t  r,
size_t  c 
) const
inline

Checks whether the rows [r-N,r+N] and the columns [c-N,c+N] are present in the matrix.

Definition at line 121 of file CMatrixTemplate.h.

◆ extractCol() [1/2]

template<class T>
void mrpt::math::CMatrixTemplate< T >::extractCol ( size_t  nCol,
std::vector< T > &  out,
int  startingRow = 0 
) const
inline

Returns a given column to a vector (without modifying the matrix)

Exceptions
std::exceptionOn index out of bounds

Definition at line 457 of file CMatrixTemplate.h.

◆ extractCol() [2/2]

template<class T>
void mrpt::math::CMatrixTemplate< T >::extractCol ( size_t  nCol,
CMatrixTemplate< T > &  out,
int  startingRow = 0 
) const
inline

Gets a given column to a vector (without modifying the matrix)

Exceptions
std::exceptionOn index out of bounds

Definition at line 475 of file CMatrixTemplate.h.

◆ extractColumns()

template<class T>
void mrpt::math::CMatrixTemplate< T >::extractColumns ( size_t  firstCol,
size_t  lastCol,
CMatrixTemplate< T > &  out 
) const
inline

Gets a series of contiguous columns.

Exceptions
std::logic_errorOn index out of bounds
See also
extractColumn
extractRows

Definition at line 449 of file CMatrixTemplate.h.

◆ extractRows()

template<class T>
void mrpt::math::CMatrixTemplate< T >::extractRows ( size_t  firstRow,
size_t  lastRow,
CMatrixTemplate< T > &  out 
) const
inline

Gets a series of contiguous rows.

Exceptions
std::logic_errorOn index out of bounds
See also
extractRow
extractColumns

Definition at line 439 of file CMatrixTemplate.h.

◆ extractSubmatrix() [1/2]

template<class T>
void mrpt::math::CMatrixTemplate< T >::extractSubmatrix ( const size_t  row1,
const size_t  row2,
const size_t  col1,
const size_t  col2,
CMatrixTemplate< T > &  out 
) const
inline

Get a submatrix, given its bounds.

See also
extractSubmatrixSymmetricalBlocks

Definition at line 406 of file CMatrixTemplate.h.

Referenced by mrpt::math::CMatrixTemplate< mrpt::math::TPoint3D >::operator()().

◆ extractSubmatrix() [2/2]

template<class T>
template<class EIGEN_MATRIX >
void mrpt::math::CMatrixTemplate< T >::extractSubmatrix ( const size_t  row1,
const size_t  row2,
const size_t  col1,
const size_t  col2,
EIGEN_MATRIX &  out 
) const
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 420 of file CMatrixTemplate.h.

◆ fillAll()

template<class T>
void mrpt::math::CMatrixTemplate< T >::fillAll ( const T &  val)
inline

◆ get_unsafe() [1/2]

template<class T>
const T& mrpt::math::CMatrixTemplate< T >::get_unsafe ( size_t  row,
size_t  col 
) const
inline

◆ get_unsafe() [2/2]

template<class T>
T& mrpt::math::CMatrixTemplate< T >::get_unsafe ( size_t  row,
size_t  col 
)
inline

Fast but unsafe method to get a reference from the matrix.

Definition at line 369 of file CMatrixTemplate.h.

◆ get_unsafe_row() [1/2]

template<class T>
T* mrpt::math::CMatrixTemplate< T >::get_unsafe_row ( size_t  row)
inline

Fast but unsafe method to obtain a pointer to a given row of the matrix (Use only in time critical applications)

Definition at line 380 of file CMatrixTemplate.h.

◆ get_unsafe_row() [2/2]

template<class T>
const T* mrpt::math::CMatrixTemplate< T >::get_unsafe_row ( size_t  row) const
inline

Fast but unsafe method to obtain a pointer to a given row of the matrix (Use only in critical applications)

Definition at line 391 of file CMatrixTemplate.h.

◆ getAsVector()

template<class T>
void mrpt::math::CMatrixTemplate< T >::getAsVector ( std::vector< T > &  out) const
inline

Returns a vector containing the matrix's values.

Definition at line 560 of file CMatrixTemplate.h.

◆ getColCount()

template<class T>
size_t mrpt::math::CMatrixTemplate< T >::getColCount ( ) const
inline

◆ getRowCount()

template<class T>
size_t mrpt::math::CMatrixTemplate< T >::getRowCount ( ) const
inline

◆ insertCol()

template<class T>
void mrpt::math::CMatrixTemplate< T >::insertCol ( size_t  nCol,
const std::vector< T > &  in 
)
inline

Inserts a column from a vector, replacing the current contents of that column.

Exceptions
std::exceptionOn index out of bounds
See also
extractCol

Definition at line 547 of file CMatrixTemplate.h.

◆ operator()() [1/5]

template<class T>
T& mrpt::math::CMatrixTemplate< T >::operator() ( size_t  row,
size_t  col 
)
inline

Subscript operator to get/set individual elements.

Definition at line 269 of file CMatrixTemplate.h.

◆ operator()() [2/5]

template<class T>
const T& mrpt::math::CMatrixTemplate< T >::operator() ( size_t  row,
size_t  col 
) const
inline

Subscript operator to get individual elements.

Definition at line 280 of file CMatrixTemplate.h.

◆ operator()() [3/5]

template<class T>
T& mrpt::math::CMatrixTemplate< T >::operator() ( size_t  ith)
inline

Subscript operator to get/set an individual element from a row or column matrix.

Exceptions
std::exceptionIf the object is not a column or row matrix.

Definition at line 292 of file CMatrixTemplate.h.

◆ operator()() [4/5]

template<class T>
T mrpt::math::CMatrixTemplate< T >::operator() ( size_t  ith) const
inline

Subscript operator to get/set an individual element from a row or column matrix.

Exceptions
std::exceptionIf the object is not a column or row matrix.

Definition at line 320 of file CMatrixTemplate.h.

◆ operator()() [5/5]

template<class T>
CMatrixTemplate<T> mrpt::math::CMatrixTemplate< T >::operator() ( const size_t  row1,
const size_t  row2,
const size_t  col1,
const size_t  col2 
) const
inline

Subscript operator to get a submatrix.

Definition at line 397 of file CMatrixTemplate.h.

◆ operator=() [1/2]

template<class T>
CMatrixTemplate& mrpt::math::CMatrixTemplate< T >::operator= ( const CMatrixTemplate< T > &  m)
inline

Assignment operator from another matrix.

Definition at line 202 of file CMatrixTemplate.h.

Referenced by mrpt::math::CMatrixBool::operator=().

◆ operator=() [2/2]

template<class T>
template<typename V , size_t N>
CMatrixTemplate& mrpt::math::CMatrixTemplate< T >::operator= ( V(&)  theArray[N])
inline

Assignment operator for initializing from a C array (The matrix must be set to the correct size before invoking this asignament)

CMatrixDouble M(3,2);
const double numbers[] = {
1,2,3,
4,5,6 };
M = numbers;

Refer also to the constructor with initialization data CMatrixTemplate::CMatrixTemplate

Definition at line 222 of file CMatrixTemplate.h.

◆ realloc()

template<class T>
void mrpt::math::CMatrixTemplate< T >::realloc ( size_t  row,
size_t  col,
bool  newElementsToZero = false 
)
inlineprotected

◆ resize()

template<class T>
void mrpt::math::CMatrixTemplate< T >::resize ( const CMatrixTemplateSize siz,
bool  zeroNewElements = false 
)
inline

This method just checks has no effects in this class, but raises an exception if the expected size does not match.

Definition at line 262 of file CMatrixTemplate.h.

◆ set_unsafe()

template<class T>
void mrpt::math::CMatrixTemplate< T >::set_unsafe ( size_t  row,
size_t  col,
const T &  v 
)
inline

◆ setSize()

template<class T>
void mrpt::math::CMatrixTemplate< T >::setSize ( size_t  row,
size_t  col,
bool  zeroNewElements = false 
)
inline

◆ size()

template<class T>
CMatrixTemplateSize mrpt::math::CMatrixTemplate< T >::size ( ) const
inline

Get a 2-vector with [NROWS NCOLS] (as in MATLAB command size(x))

Definition at line 247 of file CMatrixTemplate.h.

◆ swap()

template<class T>
void mrpt::math::CMatrixTemplate< T >::swap ( CMatrixTemplate< T > &  o)
inline

Swap with another matrix very efficiently (just swaps a pointer and two integer values).

Definition at line 134 of file CMatrixTemplate.h.

Member Data Documentation

◆ m_Cols

template<class T>
size_t mrpt::math::CMatrixTemplate< T >::m_Cols
protected

◆ m_Rows

template<class T>
size_t mrpt::math::CMatrixTemplate< T >::m_Rows
protected

◆ m_Val

template<class T>
T** mrpt::math::CMatrixTemplate< T >::m_Val
protected



Page generated by Doxygen 1.8.14 for MRPT 1.5.7 Git: 8277875f6 Mon Jun 11 02:47:32 2018 +0200 at lun oct 28 01:50:49 CET 2019