A versatible sparse matrix representation. More...
#include <SparseMatrix.h>
Classes | |
struct | default_prunning_func |
class | InnerIterator |
class | ReverseInnerIterator |
class | SingletonVector |
Public Types | |
enum | { Options = _Options } |
typedef MappedSparseMatrix < Scalar, Flags > | Map |
typedef internal::CompressedStorage < Scalar, Index > | Storage |
Public Member Functions | |
Scalar | coeff (Index row, Index col) const |
Scalar & | coeffRef (Index row, Index col) |
Index | cols () const |
void | conservativeResize (Index rows, Index cols) |
Storage & | data () |
const Storage & | data () const |
const Diagonal< const SparseMatrix > | diagonal () const |
void | finalize () |
const Index * | innerIndexPtr () const |
Index * | innerIndexPtr () |
const Index * | innerNonZeroPtr () const |
Index * | innerNonZeroPtr () |
Index | innerSize () const |
Scalar & | insert (Index row, Index col) |
Scalar & | insertBack (Index row, Index col) |
Scalar & | insertBackByOuterInner (Index outer, Index inner) |
Scalar & | insertBackByOuterInnerUnordered (Index outer, Index inner) |
EIGEN_STRONG_INLINE Scalar & | insertBackUncompressed (Index row, Index col) |
Scalar & | insertByOuterInner (Index j, Index i) |
bool | isCompressed () const |
void | makeCompressed () |
Index | nonZeros () const |
SparseMatrix & | operator= (const SparseMatrix &other) |
template<typename Lhs , typename Rhs > | |
SparseMatrix & | operator= (const SparseSparseProduct< Lhs, Rhs > &product) |
template<typename OtherDerived > | |
SparseMatrix & | operator= (const ReturnByValue< OtherDerived > &other) |
template<typename OtherDerived > | |
SparseMatrix & | operator= (const EigenBase< OtherDerived > &other) |
template<typename OtherDerived > | |
EIGEN_DONT_INLINE SparseMatrix & | operator= (const SparseMatrixBase< OtherDerived > &other) |
const Index * | outerIndexPtr () const |
Index * | outerIndexPtr () |
Index | outerSize () const |
void | prune (const Scalar &reference, const RealScalar &epsilon=NumTraits< RealScalar >::dummy_precision()) |
template<typename KeepFunc > | |
void | prune (const KeepFunc &keep=KeepFunc()) |
void | reserve (Index reserveSize) |
template<class SizesType > | |
void | reserve (const SizesType &reserveSizes, const typename SizesType::value_type &enableif=typename SizesType::value_type()) |
template<class SizesType > | |
void | reserve (const SizesType &reserveSizes, const typename SizesType::Scalar &enableif=typename SizesType::Scalar()) |
void | resize (Index rows, Index cols) |
void | resizeNonZeros (Index size) |
Index | rows () const |
template<typename InputIterators > | |
void | setFromTriplets (const InputIterators &begin, const InputIterators &end) |
void | setIdentity () |
void | setZero () |
SparseMatrix () | |
SparseMatrix (Index rows, Index cols) | |
template<typename OtherDerived > | |
SparseMatrix (const SparseMatrixBase< OtherDerived > &other) | |
template<typename OtherDerived , unsigned int UpLo> | |
SparseMatrix (const SparseSelfAdjointView< OtherDerived, UpLo > &other) | |
SparseMatrix (const SparseMatrix &other) | |
template<typename OtherDerived > | |
SparseMatrix (const ReturnByValue< OtherDerived > &other) | |
Copy constructor with in-place evaluation. | |
void | startVec (Index outer) |
Scalar | sum () const |
void | sumupDuplicates () |
void | swap (SparseMatrix &other) |
void | uncompress () |
const Scalar * | valuePtr () const |
Scalar * | valuePtr () |
~SparseMatrix () | |
Protected Types | |
typedef SparseMatrix< Scalar,(Flags &~RowMajorBit)|(IsRowMajor?RowMajorBit:0)> | TransposedSparseMatrix |
Protected Member Functions | |
template<typename Other > | |
void | initAssignment (const Other &other) |
Eigen::Map< Matrix< Index, Dynamic, 1 > > | innerNonZeros () |
const Eigen::Map< const Matrix < Index, Dynamic, 1 > > | innerNonZeros () const |
EIGEN_DONT_INLINE Scalar & | insertCompressed (Index row, Index col) |
EIGEN_DONT_INLINE Scalar & | insertUncompressed (Index row, Index col) |
template<class SizesType > | |
void | reserveInnerVectors (const SizesType &reserveSizes) |
Protected Attributes | |
Storage | m_data |
Index * | m_innerNonZeros |
Index | m_innerSize |
Index * | m_outerIndex |
Index | m_outerSize |
Static Private Member Functions | |
static void | check_template_parameters () |
Friends | |
std::ostream & | operator<< (std::ostream &s, const SparseMatrix &m) |
A versatible sparse matrix representation.
This class implements a more versatile variants of the common compressed row/column storage format. Each colmun's (resp. row) non zeros are stored as a pair of value with associated row (resp. colmiun) index. All the non zeros are stored in a single large buffer. Unlike the compressed format, there might be extra space inbetween the nonzeros of two successive colmuns (resp. rows) such that insertion of new non-zero can be done with limited memory reallocation and copies.
A call to the function makeCompressed() turns the matrix into the standard compressed format compatible with many library.
More details on this storage sceheme are given in the manual pages.
_Scalar | the scalar type, i.e. the type of the coefficients |
_Options | Union of bit flags controlling the storage scheme. Currently the only possibility is ColMajor or RowMajor. The default is 0 which means column-major. |
_Index | the type of the indices. It has to be a signed type (e.g., short, int, std::ptrdiff_t). Default is int . |
This class can be extended with the help of the plugin mechanism described on the page TopicCustomizingEigen by defining the preprocessor symbol EIGEN_SPARSEMATRIX_PLUGIN
.
Definition at line 85 of file SparseMatrix.h.
typedef MappedSparseMatrix<Scalar,Flags> Eigen::SparseMatrix< _Scalar, _Options, _Index >::Map |
Definition at line 93 of file SparseMatrix.h.
typedef internal::CompressedStorage<Scalar,Index> Eigen::SparseMatrix< _Scalar, _Options, _Index >::Storage |
Definition at line 95 of file SparseMatrix.h.
typedef SparseMatrix<Scalar,(Flags&~RowMajorBit)|(IsRowMajor?RowMajorBit:0)> Eigen::SparseMatrix< _Scalar, _Options, _Index >::TransposedSparseMatrix [protected] |
Definition at line 102 of file SparseMatrix.h.
anonymous enum |
Definition at line 96 of file SparseMatrix.h.
Eigen::SparseMatrix< _Scalar, _Options, _Index >::SparseMatrix | ( | ) | [inline] |
Default constructor yielding an empty 0
x
0
matrix
Definition at line 629 of file SparseMatrix.h.
Eigen::SparseMatrix< _Scalar, _Options, _Index >::SparseMatrix | ( | Index | rows, |
Index | cols | ||
) | [inline] |
Constructs a rows x
cols empty matrix
Definition at line 637 of file SparseMatrix.h.
Eigen::SparseMatrix< _Scalar, _Options, _Index >::SparseMatrix | ( | const SparseMatrixBase< OtherDerived > & | other | ) | [inline] |
Constructs a sparse matrix from the sparse expression other
Definition at line 646 of file SparseMatrix.h.
Eigen::SparseMatrix< _Scalar, _Options, _Index >::SparseMatrix | ( | const SparseSelfAdjointView< OtherDerived, UpLo > & | other | ) | [inline] |
Constructs a sparse matrix from the sparse selfadjoint view other
Definition at line 657 of file SparseMatrix.h.
Eigen::SparseMatrix< _Scalar, _Options, _Index >::SparseMatrix | ( | const SparseMatrix< _Scalar, _Options, _Index > & | other | ) | [inline] |
Copy constructor (it performs a deep copy)
Definition at line 665 of file SparseMatrix.h.
Eigen::SparseMatrix< _Scalar, _Options, _Index >::SparseMatrix | ( | const ReturnByValue< OtherDerived > & | other | ) | [inline] |
Copy constructor with in-place evaluation.
Definition at line 674 of file SparseMatrix.h.
Eigen::SparseMatrix< _Scalar, _Options, _Index >::~SparseMatrix | ( | ) | [inline] |
Destructor
Definition at line 783 of file SparseMatrix.h.
static void Eigen::SparseMatrix< _Scalar, _Options, _Index >::check_template_parameters | ( | ) | [inline, static, private] |
Definition at line 851 of file SparseMatrix.h.
Scalar Eigen::SparseMatrix< _Scalar, _Options, _Index >::coeff | ( | Index | row, |
Index | col | ||
) | const [inline] |
Definition at line 171 of file SparseMatrix.h.
Scalar& Eigen::SparseMatrix< _Scalar, _Options, _Index >::coeffRef | ( | Index | row, |
Index | col | ||
) | [inline] |
If the element does not exist then it is inserted via the insert(Index,Index) function which itself turns the matrix into a non compressed form if that was not the case.
This is a O(log(nnz_j)) operation (binary search) plus the cost of insert(Index,Index) function if the element does not already exist.
Definition at line 189 of file SparseMatrix.h.
Index Eigen::SparseMatrix< _Scalar, _Options, _Index >::cols | ( | void | ) | const [inline] |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _Index > >.
Definition at line 121 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::conservativeResize | ( | Index | rows, |
Index | cols | ||
) | [inline] |
Resizes the matrix to a rows x cols matrix leaving old values untouched.
Definition at line 532 of file SparseMatrix.h.
Storage& Eigen::SparseMatrix< _Scalar, _Options, _Index >::data | ( | ) | [inline] |
Definition at line 165 of file SparseMatrix.h.
const Storage& Eigen::SparseMatrix< _Scalar, _Options, _Index >::data | ( | ) | const [inline] |
Definition at line 167 of file SparseMatrix.h.
const Diagonal<const SparseMatrix> Eigen::SparseMatrix< _Scalar, _Options, _Index >::diagonal | ( | ) | const [inline] |
Definition at line 626 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::finalize | ( | ) | [inline] |
Definition at line 413 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::initAssignment | ( | const Other & | other | ) | [inline, protected] |
Definition at line 801 of file SparseMatrix.h.
const Index* Eigen::SparseMatrix< _Scalar, _Options, _Index >::innerIndexPtr | ( | ) | const [inline] |
Definition at line 140 of file SparseMatrix.h.
Index* Eigen::SparseMatrix< _Scalar, _Options, _Index >::innerIndexPtr | ( | ) | [inline] |
Definition at line 144 of file SparseMatrix.h.
const Index* Eigen::SparseMatrix< _Scalar, _Options, _Index >::innerNonZeroPtr | ( | ) | const [inline] |
Definition at line 158 of file SparseMatrix.h.
Index* Eigen::SparseMatrix< _Scalar, _Options, _Index >::innerNonZeroPtr | ( | ) | [inline] |
Definition at line 162 of file SparseMatrix.h.
Eigen::Map<Matrix<Index,Dynamic,1> > Eigen::SparseMatrix< _Scalar, _Options, _Index >::innerNonZeros | ( | ) | [inline, protected] |
Definition at line 110 of file SparseMatrix.h.
const Eigen::Map<const Matrix<Index,Dynamic,1> > Eigen::SparseMatrix< _Scalar, _Options, _Index >::innerNonZeros | ( | ) | const [inline, protected] |
Definition at line 111 of file SparseMatrix.h.
Index Eigen::SparseMatrix< _Scalar, _Options, _Index >::innerSize | ( | ) | const [inline] |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _Index > >.
Definition at line 124 of file SparseMatrix.h.
Scalar& Eigen::SparseMatrix< _Scalar, _Options, _Index >::insert | ( | Index | row, |
Index | col | ||
) | [inline] |
If the matrix *this
is in compressed mode, then *this
is turned into uncompressed mode while reserving room for 2 non zeros per inner vector. It is strongly recommended to first call reserve(const SizesType &) to reserve a more appropriate number of elements per inner vector that better match your scenario.
This function performs a sorted insertion in O(1) if the elements of each inner vector are inserted in increasing inner index order, and in O(nnz_j) for a random insertion.
Definition at line 220 of file SparseMatrix.h.
Scalar& Eigen::SparseMatrix< _Scalar, _Options, _Index >::insertBack | ( | Index | row, |
Index | col | ||
) | [inline] |
Definition at line 374 of file SparseMatrix.h.
Scalar& Eigen::SparseMatrix< _Scalar, _Options, _Index >::insertBackByOuterInner | ( | Index | outer, |
Index | inner | ||
) | [inline] |
Definition at line 381 of file SparseMatrix.h.
Scalar& Eigen::SparseMatrix< _Scalar, _Options, _Index >::insertBackByOuterInnerUnordered | ( | Index | outer, |
Index | inner | ||
) | [inline] |
Definition at line 393 of file SparseMatrix.h.
EIGEN_STRONG_INLINE Scalar& Eigen::SparseMatrix< _Scalar, _Options, _Index >::insertBackUncompressed | ( | Index | row, |
Index | col | ||
) | [inline] |
Definition at line 837 of file SparseMatrix.h.
Scalar& Eigen::SparseMatrix< _Scalar, _Options, _Index >::insertByOuterInner | ( | Index | j, |
Index | i | ||
) | [inline] |
Definition at line 442 of file SparseMatrix.h.
EIGEN_DONT_INLINE SparseMatrix< _Scalar, _Options, _Index >::Scalar & SparseMatrix::insertCompressed | ( | Index | row, |
Index | col | ||
) | [protected] |
Definition at line 1150 of file SparseMatrix.h.
EIGEN_DONT_INLINE SparseMatrix< _Scalar, _Options, _Index >::Scalar & SparseMatrix::insertUncompressed | ( | Index | row, |
Index | col | ||
) | [protected] |
Definition at line 1118 of file SparseMatrix.h.
bool Eigen::SparseMatrix< _Scalar, _Options, _Index >::isCompressed | ( | ) | const [inline] |
*this
is in compressed form. Definition at line 116 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::makeCompressed | ( | ) | [inline] |
Turns the matrix into the compressed format.
Definition at line 449 of file SparseMatrix.h.
Index Eigen::SparseMatrix< _Scalar, _Options, _Index >::nonZeros | ( | ) | const [inline] |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _Index > >.
Definition at line 246 of file SparseMatrix.h.
SparseMatrix& Eigen::SparseMatrix< _Scalar, _Options, _Index >::operator= | ( | const SparseMatrix< _Scalar, _Options, _Index > & | other | ) | [inline] |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _Index > >.
Definition at line 703 of file SparseMatrix.h.
SparseMatrix& Eigen::SparseMatrix< _Scalar, _Options, _Index >::operator= | ( | const SparseSparseProduct< Lhs, Rhs > & | product | ) | [inline] |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _Index > >.
Definition at line 727 of file SparseMatrix.h.
SparseMatrix& Eigen::SparseMatrix< _Scalar, _Options, _Index >::operator= | ( | const ReturnByValue< OtherDerived > & | other | ) | [inline] |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _Index > >.
Definition at line 731 of file SparseMatrix.h.
SparseMatrix& Eigen::SparseMatrix< _Scalar, _Options, _Index >::operator= | ( | const EigenBase< OtherDerived > & | other | ) | [inline] |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _Index > >.
Definition at line 738 of file SparseMatrix.h.
EIGEN_DONT_INLINE SparseMatrix< Scalar, _Options, _Index > & SparseMatrix::operator= | ( | const SparseMatrixBase< OtherDerived > & | other | ) |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _Index > >.
Definition at line 1057 of file SparseMatrix.h.
const Index* Eigen::SparseMatrix< _Scalar, _Options, _Index >::outerIndexPtr | ( | ) | const [inline] |
Definition at line 149 of file SparseMatrix.h.
Index* Eigen::SparseMatrix< _Scalar, _Options, _Index >::outerIndexPtr | ( | ) | [inline] |
Definition at line 153 of file SparseMatrix.h.
Index Eigen::SparseMatrix< _Scalar, _Options, _Index >::outerSize | ( | ) | const [inline] |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _Index > >.
Definition at line 126 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::prune | ( | const Scalar & | reference, |
const RealScalar & | epsilon = NumTraits<RealScalar>::dummy_precision() |
||
) | [inline] |
Suppresses all nonzeros which are much smaller than reference under the tolerence epsilon
Definition at line 490 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::prune | ( | const KeepFunc & | keep = KeepFunc() | ) | [inline] |
Turns the matrix into compressed format, and suppresses all nonzeros which do not satisfy the predicate keep. The functor type KeepFunc must implement the following function:
Definition at line 503 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::reserve | ( | Index | reserveSize | ) | [inline] |
Preallocates reserveSize non zeros.
Precondition: the matrix must be in compressed mode.
Definition at line 256 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::reserve | ( | const SizesType & | reserveSizes, |
const typename SizesType::value_type & | enableif = typename SizesType::value_type() |
||
) | [inline] |
Definition at line 270 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::reserve | ( | const SizesType & | reserveSizes, |
const typename SizesType::Scalar & | enableif = typename SizesType::Scalar() |
||
) | [inline] |
Definition at line 276 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::reserveInnerVectors | ( | const SizesType & | reserveSizes | ) | [inline, protected] |
Definition at line 288 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::resize | ( | Index | rows, |
Index | cols | ||
) | [inline] |
Resizes the matrix to a rows x cols matrix and initializes it to zero.
Definition at line 596 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::resizeNonZeros | ( | Index | size | ) | [inline] |
Definition at line 619 of file SparseMatrix.h.
Index Eigen::SparseMatrix< _Scalar, _Options, _Index >::rows | ( | void | ) | const [inline] |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _Index > >.
Definition at line 119 of file SparseMatrix.h.
void SparseMatrix::setFromTriplets | ( | const InputIterators & | begin, |
const InputIterators & | end | ||
) |
Fill the matrix *this
with the list of triplets defined by the iterator range begin - end.
A triplet is a tuple (i,j,value) defining a non-zero element. The input list of triplets does not have to be sorted, and can contains duplicated elements. In any case, the result is a sorted and compressed sparse matrix where the duplicates have been summed up. This is a O(n) operation, with n the number of triplet elements. The initial contents of *this
is destroyed. The matrix *this
must be properly resized beforehand using the SparseMatrix(Index,Index) constructor, or the resize(Index,Index) method. The sizes are not extracted from the triplet list.
The InputIterators value_type must provide the following interface:
Scalar value() const; // the value Scalar row() const; // the row index i Scalar col() const; // the column index j
See for instance the Eigen::Triplet template class.
Here is a typical usage example:
typedef Triplet<double> T; std::vector<T> tripletList; triplets.reserve(estimation_of_entries); for(...) { // ... tripletList.push_back(T(i,j,v_ij)); } SparseMatrixType m(rows,cols); m.setFromTriplets(tripletList.begin(), tripletList.end()); // m is ready to go!
Definition at line 1010 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::setIdentity | ( | ) | [inline] |
Sets *this to the identity matrix
Definition at line 695 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::setZero | ( | ) | [inline] |
Removes all non zeros but keep allocated memory
Definition at line 237 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::startVec | ( | Index | outer | ) | [inline] |
Definition at line 403 of file SparseMatrix.h.
internal::traits< SparseMatrix< _Scalar, _Options, _Index > >::Scalar SparseMatrix::sum | ( | ) | const |
Overloaded for performance
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _Index > >.
Definition at line 29 of file SparseRedux.h.
void SparseMatrix::sumupDuplicates | ( | ) |
Definition at line 1017 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::swap | ( | SparseMatrix< _Scalar, _Options, _Index > & | other | ) | [inline] |
Swaps the content of two sparse matrices of the same type. This is a fast operation that simply swaps the underlying pointers and parameters.
Definition at line 684 of file SparseMatrix.h.
void Eigen::SparseMatrix< _Scalar, _Options, _Index >::uncompress | ( | ) | [inline] |
Turns the matrix into the uncompressed mode
Definition at line 478 of file SparseMatrix.h.
const Scalar* Eigen::SparseMatrix< _Scalar, _Options, _Index >::valuePtr | ( | ) | const [inline] |
Definition at line 131 of file SparseMatrix.h.
Scalar* Eigen::SparseMatrix< _Scalar, _Options, _Index >::valuePtr | ( | ) | [inline] |
Definition at line 135 of file SparseMatrix.h.
std::ostream& operator<< | ( | std::ostream & | s, |
const SparseMatrix< _Scalar, _Options, _Index > & | m | ||
) | [friend] |
Definition at line 745 of file SparseMatrix.h.
Storage Eigen::SparseMatrix< _Scalar, _Options, _Index >::m_data [protected] |
Definition at line 108 of file SparseMatrix.h.
Index* Eigen::SparseMatrix< _Scalar, _Options, _Index >::m_innerNonZeros [protected] |
Definition at line 107 of file SparseMatrix.h.
Index Eigen::SparseMatrix< _Scalar, _Options, _Index >::m_innerSize [protected] |
Definition at line 105 of file SparseMatrix.h.
Index* Eigen::SparseMatrix< _Scalar, _Options, _Index >::m_outerIndex [protected] |
Definition at line 106 of file SparseMatrix.h.
Index Eigen::SparseMatrix< _Scalar, _Options, _Index >::m_outerSize [protected] |
Definition at line 104 of file SparseMatrix.h.