1.2.0
CCC
 
MatrixSparse Class Reference

#include <MatrixSparse.hpp>

Inheritance diagram for MatrixSparse:
AMatrix AStringable ICloneable ProjMatrix

Public Member Functions

 MatrixSparse (int nrow=0, int ncol=0, int opt_eigen=-1)
 
 MatrixSparse (const cs *A, int opt_eigen=-1)
 
 MatrixSparse (const MatrixSparse &m)
 
MatrixSparseoperator= (const MatrixSparse &m)
 
virtual ~MatrixSparse ()
 
bool isSparse () const
 Cloneable interface. More...
 
virtual bool isDense () const
 
virtual void setColumn (int icol, const VectorDouble &tab) override
 
virtual void setRow (int irow, const VectorDouble &tab) override
 
virtual void setDiagonal (const VectorDouble &tab) override
 
virtual void setDiagonalToConstant (double value=1.) override
 
virtual MatrixSparsetranspose () const override
 
virtual void addScalar (double v) override
 
virtual void addScalarDiag (double v) override
 
virtual void prodScalar (double v) override
 
virtual void fill (double value) override
 
virtual void multiplyRow (const VectorDouble &vec) override
 
virtual void multiplyColumn (const VectorDouble &vec) override
 
virtual void divideRow (const VectorDouble &vec) override
 
virtual void divideColumn (const VectorDouble &vec) override
 
virtual VectorDouble prodVecMat (const VectorDouble &x, bool transpose=false) const override
 
virtual VectorDouble prodMatVec (const VectorDouble &x, bool transpose=false) const override
 
virtual void prodMatMatInPlace (const AMatrix *x, const AMatrix *y, bool transposeX=false, bool transposeY=false) override
 
virtual NF_Triplet getMatrixToTriplet (int shiftRow=0, int shiftCol=0) const override
 
virtual String toString (const AStringFormat *strfmt=nullptr) const override
 Interface to AStringable. More...
 
void init (int nrows, int ncols)
 
virtual void addMatInPlace (const MatrixSparse &y, double cx=1., double cy=1.)
 The next functions use specific definition of matrix (to avoid dynamic_cast) rather than manipulating AMatrix. They are no more generic of AMatrix. More...
 
virtual void prodNormMatMatInPlace (const MatrixSparse &a, const MatrixSparse &m, bool transpose=false)
 
virtual void prodNormMatInPlace (const MatrixSparse &a, const VectorDouble &vec=VectorDouble(), bool transpose=false)
 
const cs * getCS () const
 
void setCS (cs *cs)
 
void freeCS ()
 
cs * getCSUnprotected () const
 
void reset (int nrows, int ncols)
 
void reset (int nrows, int ncols, double value)
 
void reset (int nrows, int ncols, const double *tab, bool byCol=true)
 
void reset (int nrows, int ncols, const VectorDouble &tab, bool byCol=true)
 
void reset (const VectorVectorDouble &tab, bool byCol=true)
 
void resetFromTriplet (const NF_Triplet &NF_T)
 
void dumpElements (const String &title, int ifrom, int ito) const
 
void fillRandom (int seed=432432, double zeroPercent=0.1)
 
int computeCholesky ()
 
int solveCholesky (const VectorDouble &b, VectorDouble &x)
 
int simulateCholesky (const VectorDouble &b, VectorDouble &x)
 
double computeCholeskyLogDeterminant ()
 
void addValue (int row, int col, double value)
 
double getValue (int row, int col) const
 
double L1Norm () const
 
void getStats (int *nrows, int *ncols, int *count, double *percent) const
 
int scaleByDiag ()
 
int addVecInPlace (const VectorDouble &x, VectorDouble &y)
 
void setConstant (double value)
 
VectorDouble extractDiag (int oper_choice=1) const
 
void prodNormDiagVecInPlace (const VectorDouble &vec, int oper=1)
 
const Eigen::SparseMatrix< double > & getEigenMatrix () const
 
void setEigenMatrix (const Eigen::SparseMatrix< double > &eigenMatrix)
 
MatrixSparseextractSubmatrixByRanks (const VectorInt &rank_rows, const VectorInt &rank_cols)
 
MatrixSparseextractSubmatrixByColor (const VectorInt &colors, int ref_color, bool row_ok, bool col_ok)
 
VectorInt colorCoding ()
 
int getNonZeros () const
 
- Public Member Functions inherited from AMatrix
 AMatrix (int nrow=0, int ncol=0, int opt_eigen=-1)
 
 AMatrix (const AMatrix &m)
 
AMatrixoperator= (const AMatrix &m)
 
virtual ~AMatrix ()
 
void init (int nrows, int ncols, int opt_eigen=-1)
 
void reset (int nrows, int ncols, double value=0., int opt_eigen=-1)
 
void resetFromArray (int nrows, int ncols, const double *tab, bool byCol=true, int opt_eigen=-1)
 
void resetFromVD (int nrows, int ncols, const VectorDouble &tab, bool byCol=true, int opt_eigen=-1)
 
void resetFromVVD (const VectorVectorDouble &tab, bool byCol=true, int opt_eigen=-1)
 
virtual bool isSquare (bool printWhyNot=false) const
 
virtual bool isValid (int irow, int icol, bool printWhyNot=false) const
 
virtual bool isIdentity (bool printWhyNot=false) const
 
virtual bool isSymmetric (bool printWhyNot=false, double eps=EPSILON10) const
 
virtual bool isDiagonal (bool printWhyNot=false) const
 
virtual bool isDiagCst (bool printWhyNot=false) const
 
virtual bool mustBeSymmetric () const
 
virtual bool mustBeDiagonal () const
 
virtual bool mustBeDiagCst () const
 
virtual void transposeInPlace ()
 
virtual VectorDouble getRow (int irow) const
 
virtual VectorDouble getColumn (int icol) const
 
void addMatInPlace (const AMatrix &y, double cx=1., double cy=1.)
 
void prodMatInPlace (const AMatrix *matY, bool transposeY=false)
 
void prodNormMatMatInPlace (const AMatrix &a, const AMatrix &m, bool transpose=false)
 
void prodNormMatInPlace (const AMatrix &a, const VectorDouble &vec=VectorDouble(), bool transpose=false)
 
void resize (int nrows, int ncols)
 
double getValue (int irow, int icol) const
 
void setValue (int irow, int icol, double value)
 
void updValue (int irow, int icol, const EOperator &oper, double value)
 
void setValue_ (int irow, int icol, double value)
 
void updValue_ (int irow, int icol, const EOperator &oper, double value)
 
double getValue_ (int irow, int icol) const
 
void addValue (int irow, int icol, double value)
 
bool isSame (const AMatrix &m, double eps=EPSILON4, bool printWhyNot=false)
 
bool isSameSize (const AMatrix &m) const
 
bool empty () const
 
double compare (const AMatrix &mat) const
 
int getNRows () const
 
int getNCols () const
 
int size () const
 
VectorDouble getValues (bool byCol=true) const
 
VectorDouble getDiagonal (int shift=0) const
 
bool isColumnDefined (int icol) const
 
bool isRowDefined (int irow) const
 
int getNumberColumnDefined () const
 
int getNumberRowDefined () const
 
bool isFlagEigen () const
 
bool isNonNegative (bool verbose=false)
 
void prodMatVecInPlace (const VectorDouble &x, VectorDouble &y, bool transpose=false) const
 
void prodMatVecInPlacePtr (const double *x, double *y, bool transpose=false) const
 
void prodVecMatInPlace (const VectorDouble &x, VectorDouble &y, bool transpose=false) const
 
void prodVecMatInPlacePtr (const double *x, double *y, bool transpose=false) const
 
double quadraticMatrix (const VectorDouble &x, const VectorDouble &y)
 
int invert ()
 
int solve (const VectorDouble &b, VectorDouble &x) const
 
void dumpElements (const String &title, int ifrom, int ito) const
 
void setIdentity (double value=1.)
 
void fillRandom (int seed=432432, double zeroPercent=0.1)
 
void setValues (const VectorDouble &values, bool byCol=true)
 
double getMeanByColumn (int icol) const
 
double getMinimum () const
 
double getMaximum () const
 
double getNormInf () const
 
void copyReduce (const AMatrix *x, const VectorInt &activeRows, const VectorInt &activeCols)
 
void copyElements (const AMatrix &m, double factor=1.)
 
void setFlagCheckAddress (bool flagCheckAddress)
 
void makePositiveColumn ()
 
void linearCombination (double val1, const AMatrix *mat1, double val2=1., const AMatrix *mat2=nullptr)
 
double operator() (int row, int col) const
 
double & operator() (int row, int col)
 
- Public Member Functions inherited from AStringable
 AStringable ()
 
 AStringable (const AStringable &r)
 
AStringableoperator= (const AStringable &r)
 
virtual ~AStringable ()
 
virtual void display (const AStringFormat *strfmt=nullptr) const final
 
virtual void display (int level) const final
 
- Public Member Functions inherited from ICloneable
 ICloneable ()
 
virtual ~ICloneable ()
 
virtual ICloneableclone () const =0
 

Static Public Member Functions

static MatrixSparsecreateFromTriplet (const NF_Triplet &NF_T, int nrow=0, int ncol=0, int opt_eigen=-1)
 
static MatrixSparseaddMatMat (const MatrixSparse *x, const MatrixSparse *y, double cx=1., double cy=1.)
 
static MatrixSparsediagVec (const VectorDouble &vec, int opt_eigen=-1)
 
static MatrixSparsediagConstant (int number, double value=1., int opt_eigen=-1)
 
static MatrixSparsediagMat (MatrixSparse *A, int oper_choice, int opt_eigen=-1)
 
static MatrixSparseglue (const MatrixSparse *A1, const MatrixSparse *A2, bool flagShiftRow, bool flagShiftCol)
 

Public Attributes

 DECLARE_TOTL
 Has a specific implementation in the Target language. More...
 

Detailed Description

Sparse Matrix

Constructor & Destructor Documentation

DISABLE_WARNING_PUSH DISABLE_WARNING_COND_EXPR_CONSTANT DISABLE_WARNING_UNUSED_BUT_SET_VARIABLE DISABLE_WARNING_POP MatrixSparse::MatrixSparse ( int  nrow = 0,
int  ncol = 0,
int  opt_eigen = -1 
)
MatrixSparse::MatrixSparse ( const cs *  A,
int  opt_eigen = -1 
)
MatrixSparse::MatrixSparse ( const MatrixSparse m)
MatrixSparse::~MatrixSparse ( )
virtual

Member Function Documentation

void MatrixSparse::addMatInPlace ( const MatrixSparse y,
double  cx = 1.,
double  cy = 1. 
)
virtual

The next functions use specific definition of matrix (to avoid dynamic_cast) rather than manipulating AMatrix. They are no more generic of AMatrix.

Add a matrix (multiplied by a constant)

Updates the current Matrix as a linear combination of matrices as follows: this <- cx * this + cy * y

Parameters
cxCoefficient applied to the current Matrix
cyCoefficient applied to the Matrix 'y'
ySecond Matrix in the Linear combination
MatrixSparse * MatrixSparse::addMatMat ( const MatrixSparse x,
const MatrixSparse y,
double  cx = 1.,
double  cy = 1. 
)
static
void MatrixSparse::addScalar ( double  v)
overridevirtual

Add a value to each matrix component

Parameters
vAdd a scalar value to all terms of the current matrix

Reimplemented from AMatrix.

void MatrixSparse::addScalarDiag ( double  v)
overridevirtual

Add value to matrix diagonal

Parameters
vAdd constant value to the diagonal of the current Matrix

Reimplemented from AMatrix.

void MatrixSparse::addValue ( int  row,
int  col,
double  value 
)
int MatrixSparse::addVecInPlace ( const VectorDouble x,
VectorDouble y 
)
VectorInt MatrixSparse::colorCoding ( )
int MatrixSparse::computeCholesky ( )
double MatrixSparse::computeCholeskyLogDeterminant ( )
MatrixSparse * MatrixSparse::createFromTriplet ( const NF_Triplet NF_T,
int  nrow = 0,
int  ncol = 0,
int  opt_eigen = -1 
)
static
MatrixSparse * MatrixSparse::diagConstant ( int  number,
double  value = 1.,
int  opt_eigen = -1 
)
static
MatrixSparse * MatrixSparse::diagMat ( MatrixSparse A,
int  oper_choice,
int  opt_eigen = -1 
)
static

Construct a sparse matrix with the diagonal of 'A', where each element is transformed

Parameters
AInput sparse matrix
oper_choiceOperation on the diagonal term (see Utilities::operate_XXX)
opt_eigenOption for choosing Eigen Library or not
Returns
MatrixSparse * MatrixSparse::diagVec ( const VectorDouble vec,
int  opt_eigen = -1 
)
static
void MatrixSparse::divideColumn ( const VectorDouble vec)
overridevirtual

Divide the matrix column-wise

Divide a Matrix column-wise

Reimplemented from AMatrix.

void MatrixSparse::divideRow ( const VectorDouble vec)
overridevirtual

Divide the matrix row-wise

Divide a Matrix row-wise

Reimplemented from AMatrix.

void MatrixSparse::dumpElements ( const String title,
int  ifrom,
int  ito 
) const

Dump a specific range of samples from the internal storage

VectorDouble MatrixSparse::extractDiag ( int  oper_choice = 1) const
MatrixSparse * MatrixSparse::extractSubmatrixByColor ( const VectorInt colors,
int  ref_color,
bool  row_ok,
bool  col_ok 
)
MatrixSparse * MatrixSparse::extractSubmatrixByRanks ( const VectorInt rank_rows,
const VectorInt rank_cols 
)
void MatrixSparse::fill ( double  value)
overridevirtual

Set all the values of the matrix at once

Change any nonzero term to 'value'

Parameters
valueConstant value used for filling 'this'

Reimplemented from AMatrix.

void MatrixSparse::fillRandom ( int  seed = 432432,
double  zeroPercent = 0.1 
)

Set all the values of the Matrix with random values

void MatrixSparse::freeCS ( )
const cs * MatrixSparse::getCS ( ) const

Returns a pointer to the Sparse storage

cs * MatrixSparse::getCSUnprotected ( ) const

Temporary function to get the CS contents of Sparse Matrix

const Eigen::SparseMatrix<double>& MatrixSparse::getEigenMatrix ( ) const
inline
NF_Triplet MatrixSparse::getMatrixToTriplet ( int  shiftRow = 0,
int  shiftCol = 0 
) const
overridevirtual

Extract the contents of the matrix

From a matrix of any type, creates the triplet (specific format for creating efficiently a Sparse matrix) It only takes the only non-zero elements of the matrix

Reimplemented from AMatrix.

int MatrixSparse::getNonZeros ( ) const
inline
void MatrixSparse::getStats ( int *  nrows,
int *  ncols,
int *  count,
double *  percent 
) const
double MatrixSparse::getValue ( int  row,
int  col 
) const
MatrixSparse * MatrixSparse::glue ( const MatrixSparse A1,
const MatrixSparse A2,
bool  flagShiftRow,
bool  flagShiftCol 
)
static
void MatrixSparse::init ( int  nrows,
int  ncols 
)
virtual bool MatrixSparse::isDense ( ) const
inlinevirtual

Returns if the matrix belongs to the MatrixSparse class (avoids dynamic_cast)

Implements AMatrix.

bool MatrixSparse::isSparse ( ) const
inlinevirtual

Cloneable interface.

Interface for AMatrix

Returns if the current matrix is Sparse

Implements AMatrix.

double MatrixSparse::L1Norm ( ) const
void MatrixSparse::multiplyColumn ( const VectorDouble vec)
overridevirtual

Multiply the matrix column-wise

Multiply a Matrix column-wise

Reimplemented from AMatrix.

void MatrixSparse::multiplyRow ( const VectorDouble vec)
overridevirtual

Multiply the matrix row-wise

Multiply a Matrix row-wise

Reimplemented from AMatrix.

MatrixSparse & MatrixSparse::operator= ( const MatrixSparse m)
void MatrixSparse::prodMatMatInPlace ( const AMatrix x,
const AMatrix y,
bool  transposeX = false,
bool  transposeY = false 
)
overridevirtual

Multiply a matrix by another and stored in 'this'

Store the product of 'x' by 'y' in this

Parameters
xFirst Matrix
ySecond matrix
transposeXTrue if First matrix is transposed
transposeYTrue if Second matrix is transposed

Reimplemented from AMatrix.

VectorDouble MatrixSparse::prodMatVec ( const VectorDouble x,
bool  transpose = false 
) const
overridevirtual

Perform y = 'this' %*% x

Reimplemented from AMatrix.

void MatrixSparse::prodNormDiagVecInPlace ( const VectorDouble vec,
int  oper_choice = 1 
)

Perform: 'this' = diag('vec') %*% 'A' %*% diag('vec')

Parameters
vecInput Vector
oper_choiceType of transformation
void MatrixSparse::prodNormMatInPlace ( const MatrixSparse a,
const VectorDouble vec = VectorDouble(),
bool  transpose = false 
)
virtual

Product 't(A)' %*% ['vec'] %*% 'A' or 'A' %*% ['vec'] %*% 't(A)' stored in 'this'

void MatrixSparse::prodNormMatMatInPlace ( const MatrixSparse a,
const MatrixSparse m,
bool  transpose = false 
)
virtual

Product 't(A)' %*% 'M' %*% 'A' or 'A' %*% 'M' %*% 't(A)' stored in 'this'

void MatrixSparse::prodScalar ( double  v)
overridevirtual

Multiply each matrix component by a value

Parameters
vMultiply all the terms of the matrix by the scalar 'v'

Reimplemented from AMatrix.

VectorDouble MatrixSparse::prodVecMat ( const VectorDouble x,
bool  transpose = false 
) const
overridevirtual

Perform y = x %*% 'this'

Reimplemented from AMatrix.

void MatrixSparse::reset ( int  nrows,
int  ncols 
)
void MatrixSparse::reset ( int  nrows,
int  ncols,
double  value 
)
void MatrixSparse::reset ( int  nrows,
int  ncols,
const double *  tab,
bool  byCol = true 
)
void MatrixSparse::reset ( int  nrows,
int  ncols,
const VectorDouble tab,
bool  byCol = true 
)
void MatrixSparse::reset ( const VectorVectorDouble tab,
bool  byCol = true 
)
void MatrixSparse::resetFromTriplet ( const NF_Triplet NF_T)
int MatrixSparse::scaleByDiag ( )
void MatrixSparse::setColumn ( int  icol,
const VectorDouble tab 
)
overridevirtual

Set the contents of a Column

Fill a column of an already existing Sparse matrix, using 'tab' as entry The input 'tab' corresponds to the whole column contents

Parameters
icolColumn rank
tabVector containing the information (Dimension: nrows)
Warning
: This method only copies the values at the non-zero existing entries

Reimplemented from AMatrix.

void MatrixSparse::setConstant ( double  value)
void MatrixSparse::setCS ( cs *  cs)
void MatrixSparse::setDiagonal ( const VectorDouble tab)
overridevirtual

Set the contents of the (main) Diagonal

Reimplemented from AMatrix.

void MatrixSparse::setDiagonalToConstant ( double  value = 1.)
overridevirtual

Set the contents of the (main) Diagonal to a constant value

Reimplemented from AMatrix.

void MatrixSparse::setEigenMatrix ( const Eigen::SparseMatrix< double > &  eigenMatrix)
inline
void MatrixSparse::setRow ( int  irow,
const VectorDouble tab 
)
overridevirtual

Set the contents of a Row

Fill a row of an already existing Sparse matrix, using 'tab' as entry The input 'tab' corresponds to the whole row contents

Parameters
irowRow rank
tabVector containing the information (Dimension: ncols)
Warning
: This method only copies the values at the non-zero existing entries

Reimplemented from AMatrix.

int MatrixSparse::simulateCholesky ( const VectorDouble b,
VectorDouble x 
)
int MatrixSparse::solveCholesky ( const VectorDouble b,
VectorDouble x 
)
String MatrixSparse::toString ( const AStringFormat strfmt = nullptr) const
overridevirtual

Interface to AStringable.

Reimplemented from AMatrix.

Reimplemented in ProjMatrix.

MatrixSparse * MatrixSparse::transpose ( ) const
overridevirtual

Transpose the matrix and return it as a copy

Reimplemented from AMatrix.

Member Data Documentation

MatrixSparse::DECLARE_TOTL

Has a specific implementation in the Target language.


The documentation for this class was generated from the following files: