![]() |
Eigen
3.3.4
|
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.
Inheritance diagram for Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >: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 () | |
Public Member Functions inherited from Eigen::SparseCompressedBase< SparseMatrix< _Scalar, _Options, _StorageIndex > > | |
| const Map< const Array< Scalar, Dynamic, 1 > > | coeffs () const |
| Map< Array< Scalar, Dynamic, 1 > > | coeffs () |
| const StorageIndex * | innerIndexPtr () const |
| StorageIndex * | innerIndexPtr () |
| const StorageIndex * | innerNonZeroPtr () const |
| StorageIndex * | innerNonZeroPtr () |
| bool | isCompressed () const |
| Index | nonZeros () const |
| const StorageIndex * | outerIndexPtr () const |
| StorageIndex * | outerIndexPtr () |
| const Scalar * | valuePtr () const |
| Scalar * | valuePtr () |
Public Member Functions inherited from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _StorageIndex > > | |
| const CwiseBinaryOp < CustomBinaryOp, const SparseMatrix< _Scalar, _Options, _StorageIndex > , const OtherDerived > | binaryExpr (const Eigen::SparseMatrixBase< OtherDerived > &other, const CustomBinaryOp &func=CustomBinaryOp()) const |
| BlockXpr | block (Index startRow, Index startCol, Index blockRows, Index blockCols) |
| const ConstBlockXpr | block (Index startRow, Index startCol, Index blockRows, Index blockCols) const |
| This is the const version of block(Index,Index,Index,Index). */. | |
| FixedBlockXpr< NRows, NCols >::Type | block (Index startRow, Index startCol) |
|
const ConstFixedBlockXpr < NRows, NCols >::Type | block (Index startRow, Index startCol) const |
| This is the const version of block<>(Index, Index). */. | |
| FixedBlockXpr< NRows, NCols >::Type | block (Index startRow, Index startCol, Index blockRows, Index blockCols) |
|
const ConstFixedBlockXpr < NRows, NCols >::Type | block (Index startRow, Index startCol, Index blockRows, Index blockCols) const |
| This is the const version of block<>(Index, Index, Index, Index). | |
| BlockXpr | bottomLeftCorner (Index cRows, Index cCols) |
| const ConstBlockXpr | bottomLeftCorner (Index cRows, Index cCols) const |
| This is the const version of bottomLeftCorner(Index, Index). | |
| FixedBlockXpr< CRows, CCols >::Type | bottomLeftCorner () |
|
const ConstFixedBlockXpr < CRows, CCols >::Type | bottomLeftCorner () const |
| This is the const version of bottomLeftCorner<int, int>(). | |
| FixedBlockXpr< CRows, CCols >::Type | bottomLeftCorner (Index cRows, Index cCols) |
|
const ConstFixedBlockXpr < CRows, CCols >::Type | bottomLeftCorner (Index cRows, Index cCols) const |
| This is the const version of bottomLeftCorner<int, int>(Index, Index). | |
| BlockXpr | bottomRightCorner (Index cRows, Index cCols) |
| const ConstBlockXpr | bottomRightCorner (Index cRows, Index cCols) const |
| This is the const version of bottomRightCorner(Index, Index). | |
| FixedBlockXpr< CRows, CCols >::Type | bottomRightCorner () |
|
const ConstFixedBlockXpr < CRows, CCols >::Type | bottomRightCorner () const |
| This is the const version of bottomRightCorner<int, int>(). | |
| FixedBlockXpr< CRows, CCols >::Type | bottomRightCorner (Index cRows, Index cCols) |
|
const ConstFixedBlockXpr < CRows, CCols >::Type | bottomRightCorner (Index cRows, Index cCols) const |
| This is the const version of bottomRightCorner<int, int>(Index, Index). | |
| RowsBlockXpr | bottomRows (Index n) |
| ConstRowsBlockXpr | bottomRows (Index n) const |
| This is the const version of bottomRows(Index). | |
| NRowsBlockXpr< N >::Type | bottomRows (Index n=N) |
| ConstNRowsBlockXpr< N >::Type | bottomRows (Index n=N) const |
| This is the const version of bottomRows<int>(). | |
| CastXpr< NewType >::Type | cast () const |
| ColXpr | col (Index i) |
| ConstColXpr | col (Index i) const |
| This is the const version of col(). | |
| Index | cols () const |
| ConjugateReturnType | conjugate () const |
| const CwiseAbsReturnType | cwiseAbs () const |
| const CwiseAbs2ReturnType | cwiseAbs2 () const |
| const CwiseBinaryOp < std::equal_to< Scalar > , const SparseMatrix< _Scalar, _Options, _StorageIndex > , const OtherDerived > | cwiseEqual (const Eigen::SparseMatrixBase< OtherDerived > &other) const |
| const CwiseScalarEqualReturnType | cwiseEqual (const Scalar &s) const |
| const CwiseInverseReturnType | cwiseInverse () const |
| const CwiseBinaryOp < internal::scalar_max_op < Scalar, Scalar >, const SparseMatrix< _Scalar, _Options, _StorageIndex > , const OtherDerived > | cwiseMax (const Eigen::SparseMatrixBase< OtherDerived > &other) const |
| const CwiseBinaryOp < internal::scalar_max_op < Scalar, Scalar >, const SparseMatrix< _Scalar, _Options, _StorageIndex > , const ConstantReturnType > | cwiseMax (const Scalar &other) const |
| const CwiseBinaryOp < internal::scalar_min_op < Scalar, Scalar >, const SparseMatrix< _Scalar, _Options, _StorageIndex > , const OtherDerived > | cwiseMin (const Eigen::SparseMatrixBase< OtherDerived > &other) const |
| const CwiseBinaryOp < internal::scalar_min_op < Scalar, Scalar >, const SparseMatrix< _Scalar, _Options, _StorageIndex > , const ConstantReturnType > | cwiseMin (const Scalar &other) const |
| const CwiseBinaryOp < std::not_equal_to< Scalar > , const SparseMatrix< _Scalar, _Options, _StorageIndex > , const OtherDerived > | cwiseNotEqual (const Eigen::SparseMatrixBase< OtherDerived > &other) const |
| const CwiseBinaryOp < internal::scalar_product_op < SparseMatrix< _Scalar, _Options, _StorageIndex > ::Scalar, OtherDerived::Scalar > , const SparseMatrix< _Scalar, _Options, _StorageIndex > , const OtherDerived > | cwiseProduct (const Eigen::SparseMatrixBase< OtherDerived > &other) const |
| const CwiseBinaryOp < internal::scalar_quotient_op < Scalar >, const SparseMatrix < _Scalar, _Options, _StorageIndex >, const OtherDerived > | cwiseQuotient (const Eigen::SparseMatrixBase< OtherDerived > &other) const |
| const CwiseSignReturnType | cwiseSign () const |
| const CwiseSqrtReturnType | cwiseSqrt () const |
| const internal::eval < SparseMatrix< _Scalar, _Options, _StorageIndex > >::type | eval () const |
| SegmentReturnType | head (Index n) |
| ConstSegmentReturnType | head (Index n) const |
| This is the const version of head(Index). | |
| FixedSegmentReturnType< N >::Type | head (Index n=N) |
|
ConstFixedSegmentReturnType< N > ::Type | head (Index n=N) const |
| This is the const version of head<int>(). | |
| const ImagReturnType | imag () const |
| NonConstImagReturnType | imag () |
| Index | innerSize () const |
| bool | isVector () const |
| ColsBlockXpr | leftCols (Index n) |
| ConstColsBlockXpr | leftCols (Index n) const |
| This is the const version of leftCols(Index). | |
| NColsBlockXpr< N >::Type | leftCols (Index n=N) |
| ConstNColsBlockXpr< N >::Type | leftCols (Index n=N) const |
| This is the const version of leftCols<int>(). | |
| ColsBlockXpr | middleCols (Index startCol, Index numCols) |
| ConstColsBlockXpr | middleCols (Index startCol, Index numCols) const |
| This is the const version of middleCols(Index,Index). | |
| NColsBlockXpr< N >::Type | middleCols (Index startCol, Index n=N) |
| ConstNColsBlockXpr< N >::Type | middleCols (Index startCol, Index n=N) const |
| This is the const version of middleCols<int>(). | |
| RowsBlockXpr | middleRows (Index startRow, Index n) |
| ConstRowsBlockXpr | middleRows (Index startRow, Index n) const |
| This is the const version of middleRows(Index,Index). | |
| NRowsBlockXpr< N >::Type | middleRows (Index startRow, Index n=N) |
| ConstNRowsBlockXpr< N >::Type | middleRows (Index startRow, Index n=N) const |
| This is the const version of middleRows<int>(). | |
| const CwiseBinaryOp < internal::scalar_boolean_and_op, const SparseMatrix< _Scalar, _Options, _StorageIndex > , const OtherDerived > | operator&& (const Eigen::SparseMatrixBase< OtherDerived > &other) const |
| const CwiseBinaryOp < internal::scalar_product_op < Scalar, T >, SparseMatrix < _Scalar, _Options, _StorageIndex >, Constant< T > > | operator* (const T &scalar) const |
| const CwiseBinaryOp< sum < Scalar >, const SparseMatrix < _Scalar, _Options, _StorageIndex >, const OtherDerived > | operator+ (const Eigen::SparseMatrixBase< OtherDerived > &other) const |
| const CwiseBinaryOp < difference< Scalar >, const SparseMatrix< _Scalar, _Options, _StorageIndex > , const OtherDerived > | operator- (const Eigen::SparseMatrixBase< OtherDerived > &other) const |
| const NegativeReturnType | operator- () const |
| const CwiseBinaryOp < internal::scalar_quotient_op < Scalar, T >, SparseMatrix < _Scalar, _Options, _StorageIndex >, Constant< T > > | operator/ (const T &scalar) const |
| const CwiseBinaryOp < internal::scalar_boolean_or_op, const SparseMatrix< _Scalar, _Options, _StorageIndex > , const OtherDerived > | operator|| (const Eigen::SparseMatrixBase< OtherDerived > &other) const |
| Index | outerSize () const |
| RealReturnType | real () const |
| NonConstRealReturnType | real () |
| ColsBlockXpr | rightCols (Index n) |
| ConstColsBlockXpr | rightCols (Index n) const |
| This is the const version of rightCols(Index). | |
| NColsBlockXpr< N >::Type | rightCols (Index n=N) |
| ConstNColsBlockXpr< N >::Type | rightCols (Index n=N) const |
| This is the const version of rightCols<int>(). | |
| RowXpr | row (Index i) |
| ConstRowXpr | row (Index i) const |
| This is the const version of row(). */. | |
| Index | rows () const |
| SegmentReturnType | segment (Index start, Index n) |
| ConstSegmentReturnType | segment (Index start, Index n) const |
| This is the const version of segment(Index,Index). | |
| FixedSegmentReturnType< N >::Type | segment (Index start, Index n=N) |
|
ConstFixedSegmentReturnType< N > ::Type | segment (Index start, Index n=N) const |
| This is the const version of segment<int>(Index). | |
| Index | size () const |
| SegmentReturnType | tail (Index n) |
| ConstSegmentReturnType | tail (Index n) const |
| This is the const version of tail(Index). | |
| FixedSegmentReturnType< N >::Type | tail (Index n=N) |
|
ConstFixedSegmentReturnType< N > ::Type | tail (Index n=N) const |
| This is the const version of tail<int>. | |
| BlockXpr | topLeftCorner (Index cRows, Index cCols) |
| const ConstBlockXpr | topLeftCorner (Index cRows, Index cCols) const |
| This is the const version of topLeftCorner(Index, Index). | |
| FixedBlockXpr< CRows, CCols >::Type | topLeftCorner () |
|
const ConstFixedBlockXpr < CRows, CCols >::Type | topLeftCorner () const |
| This is the const version of topLeftCorner<int, int>(). | |
| FixedBlockXpr< CRows, CCols >::Type | topLeftCorner (Index cRows, Index cCols) |
|
const ConstFixedBlockXpr < CRows, CCols >::Type | topLeftCorner (Index cRows, Index cCols) const |
| This is the const version of topLeftCorner<int, int>(Index, Index). | |
| BlockXpr | topRightCorner (Index cRows, Index cCols) |
| const ConstBlockXpr | topRightCorner (Index cRows, Index cCols) const |
| This is the const version of topRightCorner(Index, Index). | |
| FixedBlockXpr< CRows, CCols >::Type | topRightCorner () |
|
const ConstFixedBlockXpr < CRows, CCols >::Type | topRightCorner () const |
| This is the const version of topRightCorner<int, int>(). | |
| FixedBlockXpr< CRows, CCols >::Type | topRightCorner (Index cRows, Index cCols) |
|
const ConstFixedBlockXpr < CRows, CCols >::Type | topRightCorner (Index cRows, Index cCols) const |
| This is the const version of topRightCorner<int, int>(Index, Index). | |
| RowsBlockXpr | topRows (Index n) |
| ConstRowsBlockXpr | topRows (Index n) const |
| This is the const version of topRows(Index). | |
| NRowsBlockXpr< N >::Type | topRows (Index n=N) |
| ConstNRowsBlockXpr< N >::Type | topRows (Index n=N) const |
| This is the const version of topRows<int>(). | |
| SparseSymmetricPermutationProduct < SparseMatrix< _Scalar, _Options, _StorageIndex > , Upper|Lower > | twistedBy (const PermutationMatrix< Dynamic, Dynamic, StorageIndex > &perm) const |
| const CwiseUnaryOp < CustomUnaryOp, const SparseMatrix< _Scalar, _Options, _StorageIndex > > | unaryExpr (const CustomUnaryOp &func=CustomUnaryOp()) const |
| Apply a unary operator coefficient-wise. More... | |
| const CwiseUnaryView < CustomViewOp, const SparseMatrix< _Scalar, _Options, _StorageIndex > > | unaryViewExpr (const CustomViewOp &func=CustomViewOp()) const |
Public Member Functions inherited from Eigen::EigenBase< SparseMatrix< _Scalar, _Options, _StorageIndex > > | |
| Index | cols () const |
| SparseMatrix< _Scalar, _Options, _StorageIndex > & | derived () |
| const SparseMatrix< _Scalar, _Options, _StorageIndex > & | derived () const |
| Index | rows () const |
| Index | size () const |
Additional Inherited Members | |
Public Types inherited from Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _StorageIndex > > | |
| typedef internal::traits < SparseMatrix< _Scalar, _Options, _StorageIndex > >::StorageIndex | StorageIndex |
| typedef Scalar | value_type |
Public Types inherited from Eigen::EigenBase< SparseMatrix< _Scalar, _Options, _StorageIndex > > | |
| typedef Eigen::Index | Index |
| The interface type of indices. More... | |
Protected Member Functions inherited from Eigen::SparseCompressedBase< SparseMatrix< _Scalar, _Options, _StorageIndex > > | |
| SparseCompressedBase () | |
|
inline |
Default constructor yielding an empty 0 x 0 matrix
|
inline |
Constructs a rows x cols empty matrix
|
inline |
Constructs a sparse matrix from the sparse expression other
|
inline |
Constructs a sparse matrix from the sparse selfadjoint view other
|
inline |
Copy constructor (it performs a deep copy)
|
inline |
Destructor
|
inline |
|
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.
|
inline |
|
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.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
| 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.
|
inline |
Turns the matrix into the compressed format.
|
inline |
|
inline |
|
inline |
|
inline |
Suppresses all nonzeros which are much smaller than reference under the tolerence epsilon
|
inline |
|
inline |
Preallocates reserveSize non zeros.
Precondition: the matrix must be in compressed mode.
|
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:
for i in the [0,this->outerSize()[ range. Typical choices include std::vector<int>, Eigen::VectorXi, Eigen::VectorXi::Constant, etc.
|
inline |
|
inline |
| 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:
See for instance the Eigen::Triplet template class.
Here is a typical usage example:
| 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:
Here is a C++11 example keeping the latest entry only:
|
inline |
Sets *this to the identity matrix. This function also turns the matrix into compressed mode, and drop any reserved memory.
|
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
after resizing it.
| internal::traits< SparseMatrix< _Scalar, _Options, _Index > >::Scalar Eigen::SparseMatrix< _Scalar, _Options, _Index >::sum | ( | ) | const |
Overloaded for performance
|
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.
|
inline |
Turns the matrix into the uncompressed mode
|
inline |
|
inline |