![]() |
Eigen
3.3.3
|
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. |
_StorageIndex | the type of the indices. It has to be a signed type (e.g., short, int, std::ptrdiff_t). Default is int . |
SparseMatrix::Index
was improperly defined as the storage index type (e.g., int), whereas it is now (starting from Eigen 3.3) deprecated and always defined as Eigen::Index. Codes making use of SparseMatrix::Index
, might thus likely have to be changed to use SparseMatrix::StorageIndex
instead.This class can be extended with the help of the plugin mechanism described on the page Extending MatrixBase (and other classes) by defining the preprocessor symbol EIGEN_SPARSEMATRIX_PLUGIN
.
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) |
const ConstDiagonalReturnType | diagonal () const |
DiagonalReturnType | diagonal () |
const StorageIndex * | innerIndexPtr () const |
StorageIndex * | innerIndexPtr () |
const StorageIndex * | innerNonZeroPtr () const |
StorageIndex * | innerNonZeroPtr () |
Index | innerSize () const |
Scalar & | insert (Index row, Index col) |
void | makeCompressed () |
const StorageIndex * | outerIndexPtr () const |
StorageIndex * | 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) |
void | resize (Index rows, Index cols) |
Index | rows () const |
template<typename InputIterators > | |
void | setFromTriplets (const InputIterators &begin, const InputIterators &end) |
template<typename InputIterators , typename DupFunctor > | |
void | setFromTriplets (const InputIterators &begin, const InputIterators &end, DupFunctor dup_func) |
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. | |
template<typename OtherDerived > | |
SparseMatrix (const DiagonalBase< OtherDerived > &other) | |
Copy constructor with in-place evaluation. | |
Scalar | sum () const |
void | swap (SparseMatrix &other) |
void | uncompress () |
const Scalar * | valuePtr () const |
Scalar * | valuePtr () |
~SparseMatrix () |
Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::SparseMatrix | ( | ) | [inline] |
Default constructor yielding an empty 0
x
0
matrix
Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::SparseMatrix | ( | Index | rows, |
Index | cols | ||
) | [inline] |
Constructs a rows x
cols empty matrix
Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::SparseMatrix | ( | const SparseMatrixBase< OtherDerived > & | other | ) | [inline] |
Constructs a sparse matrix from the sparse expression other
Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::SparseMatrix | ( | const SparseSelfAdjointView< OtherDerived, UpLo > & | other | ) | [inline] |
Constructs a sparse matrix from the sparse selfadjoint view other
Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::SparseMatrix | ( | const SparseMatrix< _Scalar, _Options, _StorageIndex > & | other | ) | [inline] |
Copy constructor (it performs a deep copy)
Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::~SparseMatrix | ( | ) | [inline] |
Destructor
Scalar Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::coeff | ( | Index | row, |
Index | col | ||
) | const [inline] |
Scalar& Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::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.
Index Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::cols | ( | void | ) | const [inline] |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >.
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::conservativeResize | ( | Index | rows, |
Index | cols | ||
) | [inline] |
Resizes the matrix to a rows x cols matrix leaving old values untouched.
If the sizes of the matrix are decreased, then the matrix is turned to uncompressed-mode and the storage of the out of bounds coefficients is kept and reserved. Call makeCompressed() to pack the entries and squeeze extra memory.
const ConstDiagonalReturnType Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::diagonal | ( | ) | const [inline] |
DiagonalReturnType Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::diagonal | ( | ) | [inline] |
const StorageIndex* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::innerIndexPtr | ( | ) | const [inline] |
Reimplemented from Eigen::SparseCompressedBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >.
StorageIndex* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::innerIndexPtr | ( | ) | [inline] |
Reimplemented from Eigen::SparseCompressedBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >.
const StorageIndex* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::innerNonZeroPtr | ( | ) | const [inline] |
Reimplemented from Eigen::SparseCompressedBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >.
StorageIndex* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::innerNonZeroPtr | ( | ) | [inline] |
Reimplemented from Eigen::SparseCompressedBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >.
Index Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::innerSize | ( | ) | const [inline] |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >.
SparseMatrix< _Scalar, _Options, _StorageIndex >::Scalar & Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::insert | ( | Index | row, |
Index | col | ||
) |
If the matrix *this
is in compressed mode, then *this
is turned into uncompressed mode while reserving room for 2 x this->innerSize() non zeros if reserve(Index) has not been called earlier. In this case, the insertion procedure is optimized for a sequential insertion mode where elements are assumed to be inserted by increasing outer-indices.
If that's not the case, then it is strongly recommended to either use a triplet-list to assemble the matrix, or to first call reserve(const SizesType &) to reserve the appropriate number of non-zero elements per inner vector.
Assuming memory has been appropriately reserved, 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.
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::makeCompressed | ( | ) | [inline] |
Turns the matrix into the compressed format.
const StorageIndex* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::outerIndexPtr | ( | ) | const [inline] |
Reimplemented from Eigen::SparseCompressedBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >.
StorageIndex* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::outerIndexPtr | ( | ) | [inline] |
Reimplemented from Eigen::SparseCompressedBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >.
Index Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::outerSize | ( | ) | const [inline] |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >.
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::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
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::prune | ( | const KeepFunc & | keep = KeepFunc() | ) | [inline] |
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::reserve | ( | Index | reserveSize | ) | [inline] |
Preallocates reserveSize non zeros.
Precondition: the matrix must be in compressed mode.
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::reserve | ( | const SizesType & | reserveSizes | ) | [inline] |
Preallocates reserveSize[j
] non zeros for each column (resp. row) j
.
This function turns the matrix in non-compressed mode.
The type SizesType
must expose the following interface:
typedef value_type; const value_type& operator[](i) const;
for i
in the [0,this->outerSize()[ range. Typical choices include std::vector<int>, Eigen::VectorXi, Eigen::VectorXi::Constant, etc.
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::resize | ( | Index | rows, |
Index | cols | ||
) | [inline] |
Index Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::rows | ( | void | ) | const [inline] |
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >.
void Eigen::SparseMatrix< Scalar, _Options, _StorageIndex >::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!
void Eigen::SparseMatrix< Scalar, _Options, _StorageIndex >::setFromTriplets | ( | const InputIterators & | begin, |
const InputIterators & | end, | ||
DupFunctor | dup_func | ||
) |
The same as setFromTriplets but when duplicates are met the functor dup_func is applied:
value = dup_func(OldValue, NewValue)
Here is a C++11 example keeping the latest entry only:
mat.setFromTriplets(triplets.begin(), triplets.end(), [] (const Scalar&,const Scalar &b) { return b; });
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::setIdentity | ( | ) | [inline] |
Sets *this to the identity matrix. This function also turns the matrix into compressed mode, and drop any reserved memory.
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::setZero | ( | ) | [inline] |
Removes all non zeros but keep allocated memory
This function does not free the currently allocated memory. To release as much as memory as possible, call
mat.data().squeeze();
after resizing it.
internal::traits< SparseMatrix< _Scalar, _Options, _Index > >::Scalar Eigen::SparseMatrix< _Scalar, _Options, _Index >::sum | ( | ) | const |
Overloaded for performance
Reimplemented from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >.
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::swap | ( | SparseMatrix< _Scalar, _Options, _StorageIndex > & | 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.
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::uncompress | ( | ) | [inline] |
Turns the matrix into the uncompressed mode
const Scalar* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::valuePtr | ( | ) | const [inline] |
Reimplemented from Eigen::SparseCompressedBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >.
Scalar* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::valuePtr | ( | ) | [inline] |
Reimplemented from Eigen::SparseCompressedBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >.