Sparse Matrix
Handle a sparse matrix that can be symmetrical, square or not. Storage relies on Eigen3 Library. Storage relies on Eigen3 Library.
|
| | MatrixSparse (Id nrow=0, Id ncol=0, Id ncolmax=-1) |
| |
| | MatrixSparse (const MatrixSparse &m) |
| |
| MatrixSparse & | operator= (const MatrixSparse &m) |
| |
| | MatrixSparse (MatrixSparse &&m)=default |
| |
| MatrixSparse & | operator= (MatrixSparse &&m)=default |
| |
| virtual | ~MatrixSparse () |
| |
| DECLARE_TOLATEX Id | getSize () const override |
| | Cloneable interface.
|
| |
| const MatrixSparse & | getQMat () const override |
| | Interface for AMatrix.
|
| |
| bool | isSparse () const override |
| |
| bool | isDense () const override |
| |
| double | getValue (Id row, Id col) const override |
| |
| void | setValue (Id irow, Id icol, double value) override |
| |
| void | updValue (Id irow, Id icol, const EOperator &oper, double value) override |
| |
| void | setColumn (Id icol, const 1 &tab) override |
| |
| void | setColumnToConstant (Id icol, double value) override |
| |
| void | setRow (Id irow, const 1 &tab) override |
| |
| void | setRowToConstant (Id irow, double value) override |
| |
| void | setDiagonal (const 1 &tab) override |
| |
| void | setDiagonalToConstant (double value=1.) override |
| |
| void | fill (double value) override |
| |
| void | multiplyRow (const 1 &vec) override |
| |
| void | multiplyColumn (const 1 &vec) override |
| |
| void | divideRow (const 1 &vec) override |
| |
| void | divideColumn (const 1 &vec) override |
| |
| void | resetFromValue (Id nrows, Id ncols, double value) override |
| | Reset the matrix to new dimensions and fill with a new value.
|
| |
| void | resetFromArray (Id nrows, Id ncols, const double *tab, bool byCol=true) override |
| | Reset the matrix from an array of double values.
|
| |
| void | resetFromVD (Id nrows, Id ncols, const 1 &tab, bool byCol=true) override |
| | Reset the matrix from a vector of double values.
|
| |
| void | resetFromVVD (const 1 &tab, bool byCol=true) override |
| | Reset the matrix from an array of double values.
|
| |
| MatrixSparse * | transpose () const override |
| |
| void | prodMatMatInPlace (const AMatrix *x, const AMatrix *y, bool transposeX=false, bool transposeY=false) override |
| |
| void | prodNormMatMatInPlace (const AMatrix *a, const AMatrix *m, bool transpose=false) override |
| |
| void | prodNormMatVecInPlace (const AMatrix *a, const 1 &vec, bool transpose=false) override |
| |
| void | prodNormMatInPlace (const AMatrix *a, bool transpose=false) override |
| |
| NF_Triplet | getMatrixToTriplet (Id shiftRow=0, Id shiftCol=0) const override |
| |
| MatrixSparse & | addCst (double a) |
| |
| MatrixSparse & | prodCst (double a) |
| |
| MatrixSparse * | getRowAsMatrixSparse (Id irow, double coeff=1.) const |
| |
| MatrixSparse * | getColumnAsMatrixSparse (Id icol, double coeff=1.) const |
| |
| Id | addVecInPlaceEigen (const Eigen::Map< const Eigen::VectorXd > &xm, Eigen::Map< Eigen::VectorXd > &ym) const |
| |
| void | resetFromTriplet (const NF_Triplet &NF_T) |
| |
| void | fillRandom (double zeroPercent=0, Id seed=432432) override |
| | Fill a sparse matrix with random values, using a given seed and a percentage of zero values.
|
| |
| Id | addVecInPlace (const constvect x, vect y) const |
| |
| void | addValue (Id row, Id col, double value) |
| |
| double | L1Norm () const |
| |
| void | getStats (Id *nrows, Id *ncols, Id *count, double *percent) const |
| |
| Id | scaleByDiag () |
| |
| Id | addVecInPlaceVD (const 1 &x, 1 &y) const |
| |
| void | setConstant (double value) |
| |
| | extractDiag (Id oper_choice=1) const |
| |
| void | prodNormDiagVecInPlace (const 1 &vec, Id oper=1) |
| |
| MatrixSparse * | extractSubmatrixByRanks (const 1 &rank_rows, const 1 &rank_cols) const |
| |
| MatrixSparse * | extractSubmatrixByColor (const 1 &colors, Id ref_color, bool row_ok, bool col_ok) |
| |
| | colorCoding () const |
| |
| Id | getNonZeros () const |
| |
| void | gibbs (Id iech, const 1 &zcur, double *yk, double *sk) |
| |
| Id | forwardLU (const 1 &b, 1 &x, bool flagLower=true) const |
| |
| void | forceDimension (Id maxRows, Id maxCols) |
| |
| | getNonZeroCols (Id irow) const |
| |
| | getNonZeroRows (Id icol) const |
| |
| void | setDiagonal (const Eigen::Map< const Eigen::VectorXd > &tab) |
| |
| void | setDiagonal (const constvect tab) |
| |
| MatrixSparse & | operator+= (double a) |
| |
| MatrixSparse & | operator-= (double a) |
| |
| MatrixSparse | operator+ (double a) const |
| |
| MatrixSparse | operator- (double a) const |
| |
| MatrixSparse & | operator*= (double a) |
| |
| MatrixSparse | operator* (double a) const |
| |
| MatrixSparse & | operator/= (double a) |
| |
| MatrixSparse | operator/ (double a) const |
| |
| const EigenSparseMatrix & | eigenMat () const |
| |
| EigenSparseMatrix & | eigenMat () |
| |
| | AMatrix (Id nrow=0, Id ncol=0) |
| |
| | AMatrix (const AMatrix &m) |
| |
| AMatrix & | operator= (const AMatrix &m) |
| |
| | AMatrix (AMatrix &&m)=default |
| |
| AMatrix & | operator= (AMatrix &&m)=default |
| |
| virtual | ~AMatrix () |
| |
| String | toString (const AStringFormat *strfmt=nullptr) const override |
| | Interface to AStringable.
|
| |
| virtual bool | isSquare (bool printWhyNot=false) const |
| |
| virtual bool | isSymmetric (double eps=EPSILON10, bool printWhyNot=false) const |
| |
| virtual bool | mustBeSymmetric () const |
| |
| virtual | getRow (Id irow) const |
| |
| virtual | getColumn (Id icol) const |
| |
| virtual void | reset (Id nrows, Id ncols) |
| |
| virtual void | transposeInPlace () |
| |
| double | prodVecMatVec (const 1 &x, const 1 &y) const |
| |
| void | clear () |
| |
| void | resize (Id nrows, Id ncols) |
| | Resize the matrix to new dimensions (this method doesn't change the storage type)
|
| |
| bool | isValid (Id irow, Id icol, bool printWhyNot=false) const |
| |
| bool | isIdentity (bool printWhyNot=false) const |
| |
| void | addValue (Id irow, Id 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 |
| |
| Id | getNRows () const |
| |
| Id | getNCols () const |
| |
| Id | size () const |
| |
| | getValues (bool byCol=true) const |
| |
| const & | getDiagonal (Id shift=0) const |
| |
| bool | isColumnDefined (Id icol) const |
| |
| bool | isRowDefined (Id irow) const |
| |
| Id | getNColDefined () const |
| |
| Id | getNRowDefined () const |
| |
| | getColumnByRowRange (Id icol, Id rowFrom, Id rowTo) const |
| |
| bool | isNonNegative (bool verbose=false) const |
| |
| Id | invert () |
| |
| Id | solve (const 1 &b, 1 &x) const |
| |
| void | dumpElements (const String &title, Id ifrom, Id ito) const |
| |
| void | dumpStatistics (const String &title) const |
| |
| void | setIdentity (double value=1.) |
| |
| void | setValues (const 1 &values, bool byCol=true) |
| |
| double | getMeanByColumn (Id icol) const |
| |
| double | getMinimum () const |
| |
| double | getMaximum () const |
| |
| double | getNormInf () const |
| |
| void | copyReduce (const AMatrix *x, const 1 &validRows, const 1 &validCols) |
| |
| void | copyElements (const AMatrix &m, double factor=1.) |
| |
| void | makePositiveColumn () |
| |
| void | dumpRange (const char *title) |
| |
| double | operator() (Id row, Id col) const |
| |
| double & | operator() (Id row, Id col) |
| |
| | AStringable () |
| |
| | AStringable (const AStringable &r) |
| |
| AStringable & | operator= (const AStringable &r) |
| |
| virtual | ~AStringable () |
| |
| virtual void | display (const AStringFormat *strfmt=nullptr) const final |
| |
| virtual void | display (Id level) const final |
| |
| void | printConcreteClassName () const |
| |
| | ICloneable () |
| |
| virtual | ~ICloneable () |
| |
| virtual ICloneable * | clone () const =0 |
| |
| std::shared_ptr< ICloneable > | cloneShared () const |
| |
| std::unique_ptr< ICloneable > | cloneUnique () const |
| |
| | ASimulableMatrix () |
| |
| virtual | ~ASimulableMatrix () |
| |
| double | computeLogDet (Id nMC=1) const override |
| |
| | ASimulable () |
| |
| | ASimulable (const ASimulable &m)=default |
| |
| ASimulable & | operator= (const ASimulable &m)=default |
| |
| | ASimulable (ASimulable &&m)=default |
| |
| ASimulable & | operator= (ASimulable &&m)=default |
| |
| virtual | ~ASimulable ()=default |
| |
| Id | evalSimulate (const 1 &whitenoise, 1 &outv) const |
| |
| | evalSimulate (const 1 &whitenoise) const |
| |
| | simulate () const |
| |
| Id | evalSimulate (const constvect whitenoise, vect result) const |
| |
| Id | addSimulateToDest (const constvect whitenoise, vect outv) const |
| |
| | ALinearOp () |
| |
| | ALinearOp (const ALinearOp &m)=default |
| |
| | ALinearOp (ALinearOp &&m)=default |
| |
| ALinearOp & | operator= (const ALinearOp &m)=default |
| |
| ALinearOp & | operator= (ALinearOp &&m)=default |
| |
| virtual | ~ALinearOp ()=default |
| |
| Id | evalDirect (const 1 &inv, 1 &outv) const |
| |
| | evalDirect (const 1 &in) const |
| |
| virtual void | multiplyByValueAndAddDiagonal (double v1=1., double v2=0.) const |
| |
| virtual void | resetModif () const |
| |
| void | setUseFactor (bool usefactor) |
| |
| Id | evalDirect (constvect inv, vect outv) const |
| |
| Id | addToDest (const constvect inv, vect outv) const |
| |
| Id | addToDest (const ::Eigen::VectorXd &inv, ::Eigen::VectorXd &outv) const |
| |
|
| static MatrixSparse * | createFromMatrix (const MatrixSparse &mat) |
| |
| static void | _addGeneral (MatrixSparse &res, const MatrixSparse &other, double cst) |
| |
| static void | _addGeneral (MatrixSparse &res, const MatrixSparse &other1, const MatrixSparse &other2) |
| | Add matrices 'other1' and 'other2' and store the result in 'res' This code is alais-safe, as it does not modify 'other1' and 'other2' and only writes to 'res'.
|
| |
| static void | _prodGeneral (MatrixSparse &res, const MatrixSparse &other, double cst) |
| |
| static void | _prodGeneral (MatrixSparse &res, const MatrixSparse &other1, const MatrixSparse &other2) |
| | Make the elementwise product of matrices 'other1' and 'other2' and store the result in 'res' This code is alais-safe, as it does not modify 'other1' and 'other2' and only writes to 'res'.
|
| |
| static void | _productGeneral (MatrixSparse &res, const MatrixSparse &other1, const MatrixSparse &other2, bool transpose1=false, bool transpose2=false) |
| |
| static void | _prodVecAddGeneral (1 &res, const MatrixSparse &other, const 1 &vec, bool transpose=false, bool flagInvert=false) |
| | Add the Product of a matrix by a vector.
|
| |
| static void | _prodVecAddGeneral (vect &res, const MatrixSparse &other, const constvect &vec, bool transpose=false, bool flagInvert=false) |
| | Add the Product of a matrix by a vector.
|
| |
| static void | _prodnormGeneral (MatrixSparse &res, const MatrixSparse &a, const MatrixSparse &m=MatrixSparse(), bool transpose=false) |
| |
| static void | _prodnormGeneral (MatrixSparse &res, const MatrixSparse &a, const 1 &vec, bool transpose=false) |
| |
| static bool | _areIdenticalGeneral (const MatrixSparse &a, const MatrixSparse &b, bool verbose=false) |
| |
| static MatrixSparse * | createFromCopy (const MatrixSparse *mat) |
| |
| static MatrixSparse * | create (Id nrow, Id ncol) |
| |
| static MatrixSparse * | createFromTriplet (const NF_Triplet &NF_T, Id nrow=0, Id ncol=0, Id nrowmax=-1) |
| |
| static MatrixSparse * | createFillRandom (Id nrow, Id ncol, double zeroPercent=0.1, Id seed=143743) |
| |
| static MatrixDense * | createFromSparse (const MatrixSparse &mat) |
| |
| static MatrixSparse * | Identity (Id nrow, double value=1.) |
| |
| static MatrixSparse * | addMatMat (const MatrixSparse *x, const MatrixSparse *y, double cx=1., double cy=1.) |
| |
| static MatrixSparse * | diagVec (const 1 &vec) |
| |
| static MatrixSparse * | diagConstant (Id number, double value=1.) |
| |
| static MatrixSparse * | diagMat (MatrixSparse *A, Id oper_choice) |
| |
| static MatrixSparse * | glue (const MatrixSparse *A1, const MatrixSparse *A2, bool flagShiftRow, bool flagShiftCol) |
| |
| static void | glueInPlace (MatrixSparse *A1, const MatrixSparse *A2, bool flagShiftRow, bool flagShiftCol) |
| |
| static void | dumpElements (const String &title, Id ifrom, Id ito) |
| |
| template<class MA , class MB , class MC > |
| static void | prodMatMatInPlace (MA &A, const MB &B, const MC &C, bool transposeB=false, bool transposeC=false) |
| |
| template<typename T > |
| static T | add (const T &other, double cst) |
| | Return 'other' + 'cst'.
|
| |
| template<typename T > |
| static void | addInPlace (T &res, const T &other, double cst) |
| | Operate 'res' = 'other' + 'cst'.
|
| |
| template<typename T > |
| static T | add (const T &other1, const T &other2) |
| | Return 'other1' + 'other2'.
|
| |
| template<typename T > |
| static void | addInPlace (T &res, const T &other1, const T &other2) |
| | Operate: 'res' = 'other1' + 'other2'.
|
| |
| template<typename T > |
| static T | product (const T &other, double cst) |
| | Return 'other' * 'cst'.
|
| |
| template<typename T > |
| static void | productInPlace (T &res, const T &other, double cst) |
| | Operate: 'res' = 'other' * 'cst'.
|
| |
| template<typename T > |
| static T | prodHadamard (const T &other1, const T &other2) |
| | Return: 'other1' * 'other2' (where '*' designates the element-wise product)
|
| |
| template<typename T > |
| static void | prodHadamardInPlace (T &res, const T &other1, const T &other2) |
| | Operate: 'res' = 'other1' * 'other2' (where '*' designates the element-wise prodtc)
|
| |
| template<typename T > |
| static T | linearCombination (double addition, double val1, const T &other1, double val2=0., const T &other2=T(), double val3=0., const T &other3=T()) |
| | Return: 'val1' * 'other1' + 'val2' * 'other2' + 'val3' * 'other3' + 'addition'.
|
| |
| template<typename T > |
| static void | linearCombinationInPlace (T &res, double addition, double val1, const T &other1, double val2=0., const T &other2=T(), double val3=0., const T &other3=T()) |
| | Operate: 'res' = 'val1' * 'other1' + 'val2' * 'other2' + 'val3' * 'other3' + 'addition'.
|
| |
| template<typename T > |
| static T | product (const T &other1, const T &other2, bool transpose1=false, bool transpose2=false) |
| | Return: 'other1' * 'other2'.
|
| |
| template<typename T > |
| static void | productInPlace (T &res, const T &other1, const T &other2, bool transpose1=false, bool transpose2=false) |
| | Operate: 'res' = 'other1' * 'other2'.
|
| |
| template<typename T > |
| static void | productInPlace (T &res, const T &other2, bool transpose2=false) |
| | Operate: 'res' = 'res' * 'other1'.
|
| |
| template<typename T > |
| static | product (const T &other, const 1 &vec, bool transpose=false, bool flagInit=true) |
| | Return: 'other' * 'vec'.
|
| |
| template<typename T > |
| static void | productInPlace (1 &res, const T &other, const 1 &vec, bool transpose=false, bool flagInit=true) |
| | Operate: 'res' = 'other' * 'vec'.
|
| |
| template<typename T > |
| static void | productInPlace (vect res, const T &other, const constvect vec, bool transpose=false, bool flagInit=true) |
| | Operate: 'res' = 'other' * 'vec'.
|
| |
| template<typename T > |
| static | product (const 1 &vec, const T &other, bool transpose=false, bool flagInit=true) |
| | Return: 'vec' * 'other'.
|
| |
| template<typename T > |
| static void | productInPlace (1 &res, const 1 &vec, const T &other, bool transpose=false, bool flagInit=true) |
| | Operate: 'res' = 'vec' * 'other'.
|
| |
| template<typename T > |
| static void | productInPlace (vect res, const constvect vec, const T &other, bool transpose=false, bool flagInit=true) |
| | Operate: 'res' = 'vec' * 'other'.
|
| |
| template<typename T > |
| static T | prodnorm (const T &a, const T &m=T(), bool transpose=false) |
| | Return: 'a_t' * 'm' * 'a' or 'a' * 'm' * 'a_t' (where 'a_t' is the transpose of 'a')
|
| |
| template<typename T > |
| static void | prodnormInPlace (T &res, const T &a, const T &m=T(), bool transpose=false) |
| | Operate: 'res' = 'a_t' * 'm' * 'a' or 'a' * 'm' * 'a_t' (where 'a_t' is the transpose of 'a')
|
| |
| template<typename T > |
| static T | prodnorm (const T &a, const 1 &vec, bool transpose=false) |
| | Return: 'a_t' * 'vec' * 'a' or 'a' * 'vec' * 'a_t' (where 'a_t' is the transpose of 'a')
|
| |
| template<typename T > |
| static void | prodnormInPlace (T &res, const T &a, const 1 &vec, bool transpose=false) |
| | Operate: 'res' = 'a_t' * 'vec' * 'a' or 'a' * 'vec' * 'a_t' (where 'a_t' is the transpose of 'a')
|
| |
| template<typename T > |
| static bool | areIdentical (const T &a, const T &b, bool verbose=false) |
| | Check if two matrices are exactly identical.
|
| |