template<typename Scalar_, int Flags_ = 0, typename StorageIndex_ = int>
class Eigen::SparseMatrix< Scalar_, Flags_, StorageIndex_ >
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 in between 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.
- Template Parameters
-
| 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. |
- Warning
- In Eigen 3.2, the undocumented type
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.
|
| Scalar | coeff (Index row, Index col) const |
| |
| Scalar & | coeffRef (Index row, Index col) |
| |
| Index | cols () const |
| |
| void | conservativeResize (Index rows, Index cols) |
| |
| DiagonalReturnType | diagonal () |
| |
| const ConstDiagonalReturnType | diagonal () const |
| |
| Scalar & | findOrInsertCoeff (Index row, Index col, bool *inserted) |
| |
| StorageIndex * | innerIndexPtr () |
| |
| const StorageIndex * | innerIndexPtr () const |
| |
| StorageIndex * | innerNonZeroPtr () |
| |
| const StorageIndex * | innerNonZeroPtr () const |
| |
| Index | innerSize () const |
| |
| Scalar & | insert (Index row, Index col) |
| |
| template<typename InputIterators > |
| void | insertFromSortedTriplets (const InputIterators &begin, const InputIterators &end) |
| |
| template<typename InputIterators , typename DupFunctor > |
| void | insertFromSortedTriplets (const InputIterators &begin, const InputIterators &end, DupFunctor dup_func) |
| |
| template<typename InputIterators > |
| void | insertFromTriplets (const InputIterators &begin, const InputIterators &end) |
| |
| template<typename InputIterators , typename DupFunctor > |
| void | insertFromTriplets (const InputIterators &begin, const InputIterators &end, DupFunctor dup_func) |
| |
| bool | isCompressed () const |
| |
| void | makeCompressed () |
| |
| Index | nonZeros () const |
| |
| StorageIndex * | outerIndexPtr () |
| |
| const StorageIndex * | outerIndexPtr () const |
| |
| Index | outerSize () const |
| |
| template<typename KeepFunc > |
| void | prune (const KeepFunc &keep=KeepFunc()) |
| |
| void | prune (const Scalar &reference, const RealScalar &epsilon=NumTraits< RealScalar >::dummy_precision()) |
| |
| template<class SizesType > |
| void | reserve (const SizesType &reserveSizes) |
| |
| void | reserve (Index reserveSize) |
| |
| void | resize (Index rows, Index cols) |
| |
| Index | rows () const |
| |
| template<typename InputIterators > |
| void | setFromSortedTriplets (const InputIterators &begin, const InputIterators &end) |
| |
| template<typename InputIterators , typename DupFunctor > |
| void | setFromSortedTriplets (const InputIterators &begin, const InputIterators &end, DupFunctor dup_func) |
| |
| 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 () |
| |
|
template<typename OtherDerived > |
| | SparseMatrix (const DiagonalBase< OtherDerived > &other) |
| | Copy constructor with in-place evaluation.
|
| |
|
template<typename OtherDerived > |
| | SparseMatrix (const ReturnByValue< OtherDerived > &other) |
| | Copy constructor with in-place evaluation.
|
| |
| | SparseMatrix (const SparseMatrix &other) |
| |
| template<typename OtherDerived > |
| | SparseMatrix (const SparseMatrixBase< OtherDerived > &other) |
| |
| template<typename OtherDerived , unsigned int UpLo> |
| | SparseMatrix (const SparseSelfAdjointView< OtherDerived, UpLo > &other) |
| |
| | SparseMatrix (Index rows, Index cols) |
| |
| | SparseMatrix (SparseMatrix &&other) |
| |
| Scalar | sum () const |
| |
| void | swap (SparseMatrix &other) |
| |
| void | uncompress () |
| |
| Scalar * | valuePtr () |
| |
| const Scalar * | valuePtr () const |
| |
| | ~SparseMatrix () |
| |
| Map< Array< Scalar, Dynamic, 1 > > | coeffs () |
| |
| const Map< const Array< Scalar, Dynamic, 1 > > | coeffs () const |
| |
| StorageIndex * | innerIndexPtr () |
| |
| const StorageIndex * | innerIndexPtr () const |
| |
| Index | innerIndicesAreSorted () const |
| |
| Index | innerIndicesAreSorted (Index begin, Index end) const |
| |
| StorageIndex * | innerNonZeroPtr () |
| |
| const StorageIndex * | innerNonZeroPtr () const |
| |
| bool | isCompressed () const |
| |
| Index | nonZeros () const |
| |
| StorageIndex * | outerIndexPtr () |
| |
| const StorageIndex * | outerIndexPtr () const |
| |
| void | sortInnerIndices () |
| |
| void | sortInnerIndices (Index begin, Index end) |
| |
| Scalar * | valuePtr () |
| |
| const Scalar * | valuePtr () const |
| |
| Index | cols () const |
| |
| const internal::eval< SparseMatrix< Scalar_, Options_, int > >::type | eval () const |
| |
| Index | innerSize () const |
| |
| bool | isVector () const |
| |
| const Product< SparseMatrix< Scalar_, Options_, int >, OtherDerived, AliasFreeProduct > | operator* (const SparseMatrixBase< OtherDerived > &other) const |
| |
| Index | outerSize () const |
| |
| const SparseView< SparseMatrix< Scalar_, Options_, int > > | pruned (const Scalar &reference=Scalar(0), const RealScalar &epsilon=NumTraits< Scalar >::dummy_precision()) const |
| |
| Index | rows () const |
| |
| Index | size () const |
| |
| SparseSymmetricPermutationProduct< SparseMatrix< Scalar_, Options_, int >, Upper|Lower > | twistedBy (const PermutationMatrix< Dynamic, Dynamic, StorageIndex > &perm) const |
| |
| EIGEN_CONSTEXPR Index | cols () const EIGEN_NOEXCEPT |
| |
| SparseMatrix< Scalar_, Options_, int > & | derived () |
| |
| const SparseMatrix< Scalar_, Options_, int > & | derived () const |
| |
| EIGEN_CONSTEXPR Index | rows () const EIGEN_NOEXCEPT |
| |
| EIGEN_CONSTEXPR Index | size () const EIGEN_NOEXCEPT |
| |
template<typename Scalar_ , int Options_, typename StorageIndex_ >
- Returns
- a reference to a novel non zero coefficient with coordinates row x col. The non zero coefficient must not already exist.
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.
template<typename Scalar , int Options_, typename StorageIndex_ >
template<typename InputIterators >
| void Eigen::SparseMatrix< Scalar, Options_, StorageIndex_ >::insertFromTriplets |
( |
const InputIterators & | begin, |
|
|
const InputIterators & | end ) |
Insert a batch of elements into the matrix *this with the list of triplets defined in the half-open range from begin to 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 may contain 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 are preserved (except for the summation of duplicate elements). The matrix *this must be properly sized beforehand. The sizes are not extracted from the triplet list.
The InputIterators value_type must provide the following interface:
Scalar value() const;
IndexType row() const;
IndexType col() const;
See for instance the Eigen::Triplet template class.
Here is a typical usage example:
std::vector<T> tripletList;
tripletList.reserve(estimation_of_entries);
for(...)
{
tripletList.push_back(T(i,j,v_ij));
}
m.insertFromTriplets(tripletList.begin(), tripletList.end());
Index cols() const
Definition SparseMatrix.h:161
Index rows() const
Definition SparseMatrix.h:159
A small structure to hold a non zero as a triplet (i,j,value).
Definition SparseUtil.h:187
- Warning
- The list of triplets is read multiple times (at least twice). Therefore, it is not recommended to define an abstract iterator over a complex data-structure that would be expensive to evaluate. The triplets should rather be explicitly stored into a std::vector for instance.
template<typename Scalar , int Options_, typename StorageIndex_ >
template<typename InputIterators >
| void Eigen::SparseMatrix< Scalar, Options_, StorageIndex_ >::setFromTriplets |
( |
const InputIterators & | begin, |
|
|
const InputIterators & | end ) |
Fill the matrix *this with the list of triplets defined in the half-open range from begin to 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 may contain 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 are 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;
IndexType row() const;
IndexType col() const;
See for instance the Eigen::Triplet template class.
Here is a typical usage example:
std::vector<T> tripletList;
tripletList.reserve(estimation_of_entries);
for(...)
{
tripletList.push_back(T(i,j,v_ij));
}
m.setFromTriplets(tripletList.begin(), tripletList.end());
- Warning
- The list of triplets is read multiple times (at least twice). Therefore, it is not recommended to define an abstract iterator over a complex data-structure that would be expensive to evaluate. The triplets should rather be explicitly stored into a std::vector for instance.