123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- /**
- * @file GMSparseVectorMatrix.h
- * @brief Sparse Matrix depends on SparseVectors
- * @author Björn Fröhlich
- * @date 05/14/2009
- */
- #ifndef GMSPARSE2INCLUDE
- #define GMSPARSE2INCLUDE
- #include "GenericMatrix.h"
- namespace NICE
- {
- /** implementation of GenericMatrix using a sparse representation of a matrix as a collection of sparse vectors
- * @remark the functions in this class do not really exploit the sparseness of the involved vectors */
- class GMSparseVectorMatrix : public GenericMatrix
- {
- protected:
- //! the sparse matrix
- std::vector < NICE::SparseVector * >A;
- //! count of rows
- uint m_rows;
- //! count of columns
- uint m_cols;
- //! are the vectors new ones or come they from somewhere else
- bool newvectors;
- public:
- /**
- * simple constructor -> does nothing
- */
- GMSparseVectorMatrix ()
- {
- resize (0, 0);
- };
- /**
- * constructor which set the rows and cols of the SparseMatrix
- * @param _rows number of rows of the matrix
- * @param _cols number of cols of the matrix
- */
- GMSparseVectorMatrix (uint _rows, uint _cols);
- /**
- * converts a dense matrix to a sparse matrix
- * @param A input ICE::Matrix
- * @param epsilon tolerance value
- */
- GMSparseVectorMatrix (const NICE::Matrix & iceA, double epsilon = 1e-9);
- /**
- * simple destructor
- */
- ~GMSparseVectorMatrix ();
- /**
- * resize the matrix
- * @param _rows new count of rows
- * @param _cols new count of cols
- */
- void resize (int _rows, int _cols);
- /**
- * clean up
- */
- void clear ();
- /** get the number of rows in A */
- uint rows () const
- {
- return m_rows;
- };
- /** get the number of columns in A */
- uint cols () const
- {
- return m_cols;
- };
- /** multiply with a vector: A*x = y */
- void multiply (NICE::Vector & y, const NICE::Vector & x) const;
- /**
- * return the i-th row
- * @param i
- * @return SparseVector at row i
- */
- NICE::SparseVector & operator[] (int i) const;
- /**
- * restore the information of the sparse matrix
- * @param is inputstream
- * @param format
- */
- void restore (std::istream & is, int format = 0);
- /**
- * store the information of the sparse matrix
- * @param os outputstream
- * @param format
- */
- void store (std::ostream & os, int format = 0) const;
- /**
- * Should the data be deleted when the destructor is called
- * @param del
- */
- void setDel (bool del = true);
- /**
- * add a new row
- * @param x ICE::Vector
- */
- void addRow (const NICE::Vector & x);
- /**
- * add a new row
- * @param x SparseVector
- */
- void addRow (NICE::SparseVector * x);
- /**
- * matrixmultiplication x*y = out
- * @param y input
- * @param out output
- * @param transpx use the transpose of x
- * @param transpy use the transpose of y
- * @return z
- */
- void mult (GMSparseVectorMatrix & y, GMSparseVectorMatrix & out, bool transpx =
- false, bool transpy = false);
- /**
- * matrixmultiplication x*y = out
- * @param y input Sparse Vector
- * @param out output
- * @param transpx use the transpose of x
- * @param transpy use the transpose of y
- * @return z
- */
- void mult (NICE::SparseVector & y, GMSparseVectorMatrix & out, bool transpx =
- false, bool transpy = false);
- /**
- * same like mult, but faster when y ist very sparse and slower if not
- * @param y input
- * @param out output
- * @param transpx use the transpose of x
- * @param transpy use the transpose of y
- * @return z
- */
- void mult2 (GMSparseVectorMatrix & y, GMSparseVectorMatrix & out, bool transpx =
- false, bool transpy = false);
- };
- } // namespace
- #endif
|