gstlearn
0.2.1
Geostatistics & Machine Learning toolbox
|
TODO : Transform into template for storing something else from double. More...
#include <AMatrix.hpp>
Public Member Functions | |
virtual | ~AMatrix () |
void | init (int nrows, int ncols, bool sparse=false) |
int | getNRows () const |
int | getNCols () const |
int | getNTotal () const |
virtual double | getValue (int irow, int icol) const |
virtual double | getValue (int rank) const |
virtual double & | getValueRef (int irow, int icol) |
VectorDouble | getValues () const |
void | getValuesAsTriplets (VectorInt &irows, VectorInt &icols, VectorDouble &values) const |
VectorDouble | getDiagonal (int shift=0) const |
VectorDouble | getRow (int irow) const |
VectorDouble | getColumn (int icol) const |
void | add (int irow, int icol, double value) |
void | add (const AMatrix &tab, double value=1.) |
void | subtract (const AMatrix &tab, double value=1.) |
virtual void | setColumn (int icol, const VectorDouble &tab) |
virtual void | setRow (int irow, const VectorDouble &tab) |
virtual void | setDiagonal (const VectorDouble &tab) |
virtual void | setDiagonal (double value=1.) |
const cs * | getCs () const |
Triplet | getCsToTriplet (bool flag_from_1=false) const |
bool | isSameSize (const AMatrix &m) const |
bool | isSparse () const |
bool | isEmpty () const |
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) 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 |
bool | isSame (const AMatrix &m, double eps=EPSILON10) |
void | reset (int nrows, int ncols, bool sparse=false) |
void | reset (int nrows, int ncols, double value, bool sparse=false) |
void | reset (int nrows, int ncols, const double *tab, bool sparse=false) |
void | reset (int nrows, int ncols, const VectorDouble &tab, bool sparse=false, bool flagByRow=true) |
void | reset (const VectorVectorDouble &tab, bool flagByRow=true) |
double | compare (const AMatrix &mat) const |
void | toSparseInPlace () |
AMatrix * | toSparse () const |
virtual void | transposeInPlace () |
virtual AMatrix * | transpose () const |
virtual void | addScalar (double v) |
virtual void | addScalarDiag (double v) |
virtual void | prodScalar (double v) |
void | prodVector (const double *inv, double *outv) const |
void | prodVector (const VectorDouble &inv, VectorDouble &outv) const |
void | multiplyRow (const VectorDouble &vec) |
void | multiplyColumn (const VectorDouble &vec) |
void | divideRow (const VectorDouble &vec) |
void | divideColumn (const VectorDouble &vec) |
virtual void | addMatrix (const AMatrix &y) |
virtual void | prodMatrix (const AMatrix &x, const AMatrix &y) |
virtual void | linearCombination (double cx, double cy, const AMatrix &y) |
int | invert () |
int | solve (const VectorDouble &b, VectorDouble &x) const |
void | dumpElements (const String &title, int ifrom, int ito) const |
virtual String | toString (const AStringFormat *strfmt=nullptr) const override |
virtual void | setValue (int irow, int icol, double value) |
virtual void | setValue (int rank, double value) |
void | setIdentity (double value=1.) |
void | fill (double value) |
void | fillRandom (int seed=432432, double zeroPercent=0.1) |
void | setValuesOldStyle (const double *values, bool byCol=true) |
void | setValues (const VectorDouble &values, bool byCol=true) |
void | setValuesByArrays (const VectorInt &irows, const VectorInt &icols, const VectorDouble &values) |
double | getMeanByColumn (int icol) const |
double | getMinimum () const |
double | getMaximum () const |
void | copyReduce (const AMatrix *x, const VectorInt &validRows, const VectorInt &validCols) |
double | operator() (int row, int col) const |
double & | operator() (int row, int 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 (int level) const final |
![]() | |
ICloneable () | |
virtual | ~ICloneable () |
virtual ICloneable * | clone () const =0 |
Protected Member Functions | |
AMatrix (int nrow=0, int ncol=0, bool sparse=false) | |
AMatrix (const cs *A) | |
AMatrix (const AMatrix &m) | |
AMatrix & | operator= (const AMatrix &m) |
virtual bool | _isPhysicallyPresent (int, int) const |
virtual bool | _isCompatible (const AMatrix &m) const =0 |
virtual void | _allocate ()=0 |
virtual void | _deallocate ()=0 |
virtual int | _getMatrixSize () const =0 |
virtual void | _setValue (int rank, double value)=0 |
virtual void | _setValue (int irow, int icol, double value)=0 |
virtual void | _setValues (const double *values, bool byCol)=0 |
virtual double | _getValue (int irow, int icol) const =0 |
virtual double | _getValue (int rank) const =0 |
virtual double & | _getValueRef (int irow, int icol)=0 |
virtual void | _transposeInPlace ()=0 |
virtual void | _prodVector (const double *inv, double *outv) const =0 |
virtual int | _invert ()=0 |
virtual int | _solve (const VectorDouble &b, VectorDouble &x) const =0 |
virtual void | _clearContents () |
void | _setNCols (int ncols) |
void | _setNRows (int nrows) |
bool | _isNumbersValid (int nrows, int ncols) const |
bool | _isColumnValid (int icol) const |
bool | _isRowValid (int irow) const |
bool | _isIndexValid (int irow, int icol) const |
bool | _isRowVectorConsistent (const VectorDouble &tab) |
bool | _isColVectorConsistent (const VectorDouble &tab) |
bool | _isVectorSizeConsistent (int nrows, int ncols, const VectorDouble &tab) |
bool | _isRankValid (int rank) const |
void | _clear () |
Private Member Functions | |
void | _setSparse (bool sparse) |
void | _initiateSparse () |
void | _recopySparse (const cs *cs) |
void | _deallocateSparse () |
void | _forbiddenForSparse (const String &func) const |
Private Attributes | |
int | _nRows |
int | _nCols |
bool | _sparse |
cs * | _csMatrix |
TODO : Transform into template for storing something else from double.
Matrix
|
protected |
|
protected |
|
protected |
|
virtual |
|
protectedpure virtual |
Implemented in MatrixSquareSymmetric, MatrixSquareDiagonal, MatrixSquareDiagonalCst, MatrixRectangular, and MatrixSquareGeneral.
|
protected |
|
inlineprotectedvirtual |
Reimplemented in Table.
|
protectedpure virtual |
Implemented in MatrixSquareSymmetric, MatrixSquareDiagonal, MatrixSquareDiagonalCst, MatrixRectangular, and MatrixSquareGeneral.
|
private |
|
private |
|
protectedpure virtual |
Implemented in MatrixSquareSymmetric, MatrixSquareDiagonal, MatrixSquareDiagonalCst, MatrixRectangular, and MatrixSquareGeneral.
|
protectedpure virtual |
Implemented in MatrixSquareSymmetric, MatrixSquareDiagonal, MatrixSquareDiagonalCst, MatrixRectangular, and MatrixSquareGeneral.
|
protectedpure virtual |
Implemented in MatrixSquareSymmetric, MatrixSquareDiagonal, MatrixSquareDiagonalCst, MatrixRectangular, and MatrixSquareGeneral.
|
protectedpure virtual |
Implemented in MatrixSquareDiagonalCst, MatrixSquareSymmetric, MatrixSquareDiagonal, MatrixRectangular, and MatrixSquareGeneral.
|
private |
This strange function instantiate a sparse matrix with given dimensions filled with zeroes. It should be an empty matrix... But this does not make sense. Therefore it is created by setting a single element at the lower bottom size of the matrix ... filled with a zero.
|
protectedpure virtual |
Implemented in MatrixSquareSymmetric, MatrixSquareDiagonal, MatrixSquareDiagonalCst, MatrixRectangular, and MatrixSquareGeneral.
|
protected |
|
protected |
|
protectedpure virtual |
Implemented in MatrixSquareDiagonal, MatrixSquareDiagonalCst, MatrixSquareSymmetric, MatrixRectangular, and MatrixSquareGeneral.
|
protected |
|
protected |
|
inlineprotectedvirtual |
Say if (irow, icol) is stored physically or not
Reimplemented in MatrixSquareDiagonal, MatrixSquareDiagonalCst, and MatrixSquareSymmetric.
|
protected |
|
protected |
|
protected |
|
protected |
|
protectedpure virtual |
Implemented in MatrixSquareSymmetric, MatrixSquareDiagonal, MatrixSquareDiagonalCst, MatrixRectangular, and MatrixSquareGeneral.
|
private |
|
inlineprotected |
|
inlineprotected |
|
inlineprivate |
|
protectedpure virtual |
Implemented in MatrixSquareSymmetric, MatrixSquareDiagonal, MatrixSquareDiagonalCst, MatrixRectangular, and MatrixSquareGeneral.
|
protectedpure virtual |
Implemented in MatrixSquareSymmetric, MatrixSquareDiagonal, MatrixSquareDiagonalCst, MatrixRectangular, and MatrixSquareGeneral.
|
protectedpure virtual |
Implemented in MatrixSquareSymmetric, MatrixSquareDiagonal, MatrixSquareDiagonalCst, MatrixRectangular, and MatrixSquareGeneral.
|
protectedpure virtual |
Implemented in MatrixSquareSymmetric, MatrixSquareDiagonal, MatrixSquareDiagonalCst, MatrixRectangular, and MatrixSquareGeneral.
|
protectedpure virtual |
Implemented in MatrixSquareSymmetric, MatrixSquareDiagonal, MatrixRectangular, and MatrixSquareGeneral.
void AMatrix::add | ( | int | irow, |
int | icol, | ||
double | value | ||
) |
Add a value to a matrix term
void AMatrix::add | ( | const AMatrix & | tab, |
double | value = 1. |
||
) |
Add a matrix to this
Perform: this += 'value' * 'tab'
tab | Current matrix |
value | Multiplicative coefficient (default = 1) |
|
virtual |
Add a matrix to this component by component
Add the matrix 'y' to the current Matrix
y | Matrix to be added |
|
virtual |
Add a value to each matrix component
v | Add a scalar value to all terms of the current matrix |
Reimplemented in MatrixSquareDiagonal, and MatrixSquareDiagonalCst.
|
virtual |
Add value to matrix diagonal
v | Add constant value to the diagonal of the current Matrix |
Reimplemented in MatrixSquareDiagonalCst.
double AMatrix::compare | ( | const AMatrix & | mat | ) | const |
Returns the sum of absolute difference between argument and this
void AMatrix::copyReduce | ( | const AMatrix * | x, |
const VectorInt & | validRows, | ||
const VectorInt & | validCols | ||
) |
void AMatrix::divideColumn | ( | const VectorDouble & | vec | ) |
Divide a Matrix column-wise
void AMatrix::divideRow | ( | const VectorDouble & | vec | ) |
Divide a Matrix row-wise
void AMatrix::dumpElements | ( | const String & | title, |
int | ifrom, | ||
int | ito | ||
) | const |
Dump a specific range of samples from the internal storage
void AMatrix::fill | ( | double | value | ) |
Set all the values of the Matrix at once
Fill 'this' with the constant 'value'
value | Constant value used for filling 'this' |
void AMatrix::fillRandom | ( | int | seed = 432432 , |
double | zeroPercent = 0.1 |
||
) |
VectorDouble AMatrix::getColumn | ( | int | icol | ) | const |
Extract a Column
|
inline |
Returns a pointer to the Sparse storage
Triplet AMatrix::getCsToTriplet | ( | bool | flag_from_1 = false | ) | const |
VectorDouble AMatrix::getDiagonal | ( | int | shift = 0 | ) | const |
Extract a Diagonal (main or secondary) of this
double AMatrix::getMaximum | ( | ) | const |
double AMatrix::getMeanByColumn | ( | int | icol | ) | const |
double AMatrix::getMinimum | ( | ) | const |
|
inline |
Returns the number of columns
|
inline |
Returns the number of rows
|
inline |
Get the total number of elements of the (full) matrix
VectorDouble AMatrix::getRow | ( | int | irow | ) | const |
Extract a Row
|
virtual |
Gets the value at row 'irow' and column 'icol'
|
virtual |
Gets the value at rank 'rank'
|
virtual |
Gets a reference to the value at row 'irow' and column 'icol'
VectorDouble AMatrix::getValues | ( | ) | const |
Returns the contents of the whole matrix as a VectorDouble
void AMatrix::getValuesAsTriplets | ( | VectorInt & | irows, |
VectorInt & | icols, | ||
VectorDouble & | values | ||
) | const |
Extract the contents of the matrix
From a matrix of any type, creates the three vectors of the triplet (specific format for creating efficiently a Sparse matrix) It only takes the only non-zero elements of the matrix
irows | Output array of row indices |
icols | Output array of column indices |
values | Output array of non-zero values |
TODO : use cs_sparce corresponding function
void AMatrix::init | ( | int | nrows, |
int | ncols, | ||
bool | sparse = false |
||
) |
int AMatrix::invert | ( | ) |
Matrix inversion in place
|
virtual |
Check if the contents of the matrix is constant and diagonal
|
virtual |
Check if the matrix is (non empty) diagonal
Reimplemented in MatrixSquareDiagonal.
|
inline |
Returns if the current matrix is Empty
|
virtual |
Check if the matrix is square and Identity
Check if a matrix is the same as me (norm L1)
bool AMatrix::isSameSize | ( | const AMatrix & | m | ) | const |
Check that both matrix have the same number of rows and columns
Check that Matrix 'm' share the same dimensions as current one
m | Matrix to be compared to the current Matrix |
|
inline |
Returns if the current matrix is Sparse
|
virtual |
Check if the matrix is (non empty) square
Reimplemented in MatrixSquareGeneral.
|
virtual |
Check if the input matrix is (non empty and square) symmetric
Reimplemented in MatrixSquareSymmetric.
|
virtual |
Indicate if the given indices are valid for the current matrix size
Indicate if the given indices are valid for the current matrix size
irow | Row index |
icol | Column index |
printWhyNot | Print the message is the answer if false |
Reimplemented in MatrixSquareDiagonalCst, and MatrixSquareDiagonal.
|
virtual |
Linear combination of matrices
Updates the current Matrix as a linear combination of matrices as follows: this <- cx * this + cy * y
cx | Coefficient applied to the current Matrix |
cy | Coefficient applied to the Matrix 'y' |
y | Second Matrix in the Linear combination |
void AMatrix::multiplyColumn | ( | const VectorDouble & | vec | ) |
Multiply a Matrix column-wise
void AMatrix::multiplyRow | ( | const VectorDouble & | vec | ) |
Multiply a Matrix row-wise
|
inlinevirtual |
Say if the matrix must be diagonal constant
Reimplemented in MatrixSquareDiagonal, MatrixSquareSymmetric, MatrixSquareGeneral, MatrixSquareDiagonalCst, and MatrixRectangular.
|
inlinevirtual |
Say if the matrix must be diagonal
Reimplemented in MatrixSquareDiagonal, MatrixSquareSymmetric, MatrixSquareGeneral, and MatrixRectangular.
|
inlinevirtual |
Say if the matrix must be symmetric
Reimplemented in MatrixSquareSymmetric, MatrixSquareGeneral, and MatrixRectangular.
|
inline |
Get value operator override
|
inline |
Set value operator override
Multiply a matrix by another and store the result in the current matrix
Store the product of 'x' by 'y' in this
x | First Matrix |
y | Second matrix |
|
virtual |
Multiply each matrix component by a value
v | Multiply all the terms of the matrix by the scalar 'v' |
void AMatrix::prodVector | ( | const double * | inv, |
double * | outv | ||
) | const |
Product of the Matrix by a vector (on its right)
inv | Input vector |
outv | Output vector obtained by multiplying 'inv' by current Matrix |
void AMatrix::prodVector | ( | const VectorDouble & | inv, |
VectorDouble & | outv | ||
) | const |
void AMatrix::reset | ( | int | nrows, |
int | ncols, | ||
bool | sparse = false |
||
) |
void AMatrix::reset | ( | int | nrows, |
int | ncols, | ||
double | value, | ||
bool | sparse = false |
||
) |
void AMatrix::reset | ( | int | nrows, |
int | ncols, | ||
const double * | tab, | ||
bool | sparse = false |
||
) |
void AMatrix::reset | ( | int | nrows, |
int | ncols, | ||
const VectorDouble & | tab, | ||
bool | sparse = false , |
||
bool | flagByRow = true |
||
) |
void AMatrix::reset | ( | const VectorVectorDouble & | tab, |
bool | flagByRow = true |
||
) |
|
virtual |
Set the contents of a Column
Reimplemented in MatrixSquareDiagonalCst, and MatrixSquareDiagonal.
|
virtual |
Set the contents of the (main) Diagonal
Reimplemented in MatrixSquareDiagonalCst.
|
virtual |
void AMatrix::setIdentity | ( | double | value = 1. | ) |
Sets the matrix as Identity
|
virtual |
Set the contents of a Row
Reimplemented in MatrixSquareDiagonalCst, and MatrixSquareDiagonal.
|
virtual |
Sets the value at row 'irow' and column 'icol'
|
virtual |
Sets the value at rank 'rank'
void AMatrix::setValues | ( | const VectorDouble & | values, |
bool | byCol = true |
||
) |
Filling the matrix with an array of values Note that this array is ALWAYS dimensioned to the total number of elements in the matrix. Kept for compatibility with old code where matrix contents was stored as a VectorDouble
values | |
byCol | true for Column major; false for Row Major |
void AMatrix::setValuesByArrays | ( | const VectorInt & | irows, |
const VectorInt & | icols, | ||
const VectorDouble & | values | ||
) |
void AMatrix::setValuesOldStyle | ( | const double * | values, |
bool | byCol = true |
||
) |
Filling the matrix with an array of values Note that this array is ALWAYS dimensioned to the total number of elements in the matrix. Kept for compatibility with old code where matrix contents was stored as a double* array
values | Input array (Dimension: nrow * ncol) |
byCol | true for Column major; false for Row Major |
int AMatrix::solve | ( | const VectorDouble & | b, |
VectorDouble & | x | ||
) | const |
Solving the Matrix Linear system
void AMatrix::subtract | ( | const AMatrix & | tab, |
double | value = 1. |
||
) |
Subtract a matrix to this
AMatrix * AMatrix::toSparse | ( | ) | const |
Transform any matrix in a Sparse format
void AMatrix::toSparseInPlace | ( | ) |
Transform the current matrix (any format) in a Sparse format in place
|
overridevirtual |
Conversion to a string
Reimplemented from AStringable.
Reimplemented in MatrixSquareSymmetric, Table, MatrixSquareDiagonal, and MatrixSquareDiagonalCst.
|
virtual |
Transpose the matrix and return it as a copy
|
virtual |
Transpose the matrix in place
Reimplemented in MatrixSquareDiagonalCst, and MatrixSquareDiagonal.
|
private |
|
private |
|
private |
|
private |