42 #ifndef BPP_NUMERIC_MATRIX_MATRIX_H
43 #define BPP_NUMERIC_MATRIX_MATRIX_H
48 #include "../../Clonable.h"
49 #include "../NumConstants.h"
50 #include "../NumTools.h"
51 #include "../VectorExceptions.h"
58 template<
class Scalar>
72 virtual const Scalar&
operator()(
size_t i,
size_t j)
const = 0;
89 if (NumTools::abs<double>(
static_cast<double>(
operator()(i, j)) -
static_cast<double>(m(i, j))) > threshold)
return false;
106 virtual std::vector<Scalar>
row(
size_t i)
const = 0;
111 virtual std::vector<Scalar>
col(
size_t j)
const = 0;
118 virtual void resize(
size_t nRows,
size_t nCols) = 0;
128 template<
class Scalar>
133 std::vector< std::vector<Scalar> >
m_;
140 for (
size_t i = 0; i < nRow; i++)
150 for (
size_t i = 0; i < nr; i++)
153 for (
size_t j = 0; j < nc; j++)
165 for (
size_t i = 0; i < nr; i++)
168 for (
size_t j = 0; j < nc; j++)
181 const Scalar&
operator()(
size_t i,
size_t j)
const {
return m_[i][j]; }
189 std::vector<Scalar>
row(
size_t i)
const
196 const std::vector<Scalar>&
getRow(
size_t i)
const
206 std::vector<Scalar>
col(
size_t j)
const
216 for (
size_t i = 0; i < nRows; i++)
222 void addRow(
const std::vector<Scalar>& newRow)
226 m_.push_back(newRow);
236 template<
class Scalar>
241 std::vector< std::vector<Scalar> >
m_;
248 for (
size_t i = 0; i < nCol; i++)
258 for (
size_t i = 0; i < nc; i++)
261 for (
size_t j = 0; j < nr; j++)
273 for (
size_t i = 0; i < nc; i++)
276 for (
size_t j = 0; j < nr; j++)
289 const Scalar&
operator()(
size_t i,
size_t j)
const {
return m_[j][i]; }
297 std::vector<Scalar>
row(
size_t i)
const
304 const std::vector<Scalar>&
getCol(
size_t i)
const
314 std::vector<Scalar>
col(
size_t j)
const
324 for (
size_t i = 0; i < nCols; i++)
330 void addCol(
const std::vector<Scalar>& newCol)
334 m_.push_back(newCol);
354 template<
class Scalar>
359 std::vector<Scalar>
m_;
380 for (
size_t i = 0; i <
rows_; i++)
382 for (
size_t j = 0; j <
cols_; j++)
394 for (
size_t i = 0; i <
rows_; i++)
396 for (
size_t j = 0; j <
cols_; j++)
421 std::vector<Scalar>
row(
size_t i)
const
431 std::vector<Scalar>
col(
size_t j)
const
449 resize(nRows, nCols,
true);
495 void resize(
size_t nRows,
size_t nCols,
bool keepValues)
503 for (
size_t i = 0; i < nRows; i++)
505 for (
size_t j = 0; j < nCols; j++)
526 m_.resize(nRows * nCols);
532 template<
class Scalar>
541 if (m1(i, j) != m2(i, j))
The Clonable interface (allow an object to be cloned).
Matrix storage by column.
std::vector< Scalar > col(size_t j) const
const std::vector< Scalar > & getCol(size_t i) const
std::vector< Scalar > & getCol(size_t i)
std::vector< Scalar > row(size_t i) const
size_t getNumberOfColumns() const
Scalar & operator()(size_t i, size_t j)
void resize(size_t nRows, size_t nCols)
Resize the matrix.
const Scalar & operator()(size_t i, size_t j) const
ColMatrix * clone() const
Create a copy of this object and send a pointer to it.
ColMatrix(const Matrix< Scalar > &m)
ColMatrix & operator=(const Matrix< Scalar > &m)
void addCol(const std::vector< Scalar > &newCol)
ColMatrix(size_t nRow, size_t nCol)
std::vector< std::vector< Scalar > > m_
size_t getNumberOfRows() const
Exception thrown when a dimension problem occured.
Matrix storage in one vector.
void resize(size_t nRows, size_t nCols)
Resize the matrix.
const Scalar & operator()(size_t i, size_t j) const
LinearMatrix & operator=(const Matrix< Scalar > &m)
Scalar & operator()(size_t i, size_t j)
LinearMatrix(size_t nRow, size_t nCol)
build a nRow x nCol matrix.
void resize_(size_t nRows, size_t nCols)
Internal basic resize fonctionnalities.
virtual ~LinearMatrix()
Destructor.
size_t getNumberOfRows() const
LinearMatrix()
Build a 0 x 0 matrix.
std::vector< Scalar > col(size_t j) const
LinearMatrix(const Matrix< Scalar > &m)
size_t getNumberOfColumns() const
std::vector< Scalar > row(size_t i) const
LinearMatrix * clone() const
Create a copy of this object and send a pointer to it.
void resize(size_t nRows, size_t nCols, bool keepValues)
Resize the matrix.
The matrix template interface.
virtual std::vector< Scalar > row(size_t i) const =0
virtual std::vector< Scalar > col(size_t j) const =0
virtual bool equals(const Matrix &m, double threshold=NumConstants::TINY())
virtual size_t getNumberOfColumns() const =0
virtual void resize(size_t nRows, size_t nCols)=0
Resize the matrix.
virtual size_t getNumberOfRows() const =0
virtual Scalar & operator()(size_t i, size_t j)=0
virtual const Scalar & operator()(size_t i, size_t j) const =0
const Scalar & operator()(size_t i, size_t j) const
size_t getNumberOfRows() const
std::vector< Scalar > col(size_t j) const
void addRow(const std::vector< Scalar > &newRow)
RowMatrix & operator=(const Matrix< Scalar > &m)
RowMatrix * clone() const
Create a copy of this object and send a pointer to it.
size_t getNumberOfColumns() const
const std::vector< Scalar > & getRow(size_t i) const
std::vector< Scalar > & getRow(size_t i)
std::vector< Scalar > row(size_t i) const
Scalar & operator()(size_t i, size_t j)
RowMatrix(const Matrix< Scalar > &m)
RowMatrix(size_t nRow, size_t nCol)
void resize(size_t nRows, size_t nCols)
Resize the matrix.
std::vector< std::vector< Scalar > > m_
bool operator==(const Matrix< Scalar > &m1, const Matrix< Scalar > &m2)