Spec-Zone.ru › Eigen3

Eigen::SparseMatrix

template<typename _Scalar, int _Options, typename _StorageIndex>
class Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >

Универсальное представление разреженной матрицы.

Этот класс реализует более универсальные варианты стандартного хранения матриц в виде сжатых строк/столбцов. Не нулевые элементы каждого столбца (соответственно, строки) хранятся как пара значения и соответствующего индекса строки (соответственно, столбца). Все ненулевые элементы хранятся в одном большом буфере. В отличие от сжатого формата, между ненулевыми элементами двух последовательных столбцов (соответственно, строк) может быть дополнительное пространство, что позволяет вставлять новые ненулевые элементы с ограниченным перераспределением памяти и копированием.

Вызов функции makeCompressed() преобразует матрицу в стандартный сжатый формат, совместимый со многими библиотеками.

Дополнительные сведения об этой схеме хранения приведены в руководстве.

Шаблонные параметры
_Scalar тип скаляра, т.е. тип коэффициентов
_Options Объединение флагов, определяющих схему хранения. В настоящее время единственной возможностью является ColMajor или RowMajor. По умолчанию используется 0, что соответствует хранению в порядке следования столбцов.
_StorageIndex тип индексов. Он должен быть знаковым типом (например, short, int, std::ptrdiff_t). Значение по умолчанию — int.
Предупреждение
В Eigen 3.2 недокументированный тип SparseMatrix::Index был неправильно определен как тип индекса хранения (например, int), тогда как теперь (начиная с Eigen 3.3) он устарел и всегда определяется как Eigen::Index. Код, использующий SparseMatrix::Index, вероятно, должен быть изменён на использование SparseMatrix::StorageIndex вместо него.

Этот класс можно расширить с помощью механизма плагинов, описанного на странице Расширение MatrixBase (и других классов), определяя препроцессорную директиву EIGEN_SPARSEMATRIX_PLUGIN.

Inheritance graph
Масштабное значение coeff (Index строка, Index столбец) const
Масштабное значение & coeffRef (Index строка, Index столбец)
Индекс cols () const
void conservativeResize (Index rows, Index cols)
DiagonalReturnType diagonal ()
const ConstDiagonalReturnType diagonal () const
StorageIndex * innerIndexPtr ()
const StorageIndex * innerIndexPtr () const
StorageIndex * innerNonZeroPtr ()
const StorageIndex * innerNonZeroPtr () const
Индекс innerSize () const
Масштабное значение & insert (Index строка, Index столбец)
bool isCompressed () const
void makeCompressed ()
Индекс nonZeros () const
StorageIndex * outerIndexPtr ()
const StorageIndex * outerIndexPtr () const
Индекс 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 (Индекс reserveSize)
void resize (Индекс rows, Индекс cols)
Индекс 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 ()
template<typename OtherDerived >
SparseMatrix (const DiagonalBase< OtherDerived > &other)
Конструктор копирования с вычислением на месте.
template<typename OtherDerived >
SparseMatrix (const ReturnByValue< OtherDerived > &other)
Конструктор копирования с вычислением на месте.
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 (Индекс rows, Индекс cols)
Масштабное значение sum () const
void swap (SparseMatrix &other)
void uncompress ()
Масштабное значение * valuePtr ()
const Scalar * valuePtr () const
~SparseMatrix ()
- Общедоступные члены-функции, унаследованные от Eigen::SparseCompressedBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >
Map< Array< Scalar, Dynamic, 1 > > coeffs ()
const Map< const Array< Scalar, Dynamic, 1 > > coeffs () const
StorageIndex * innerIndexPtr ()
const StorageIndex * innerIndexPtr () const
StorageIndex * innerNonZeroPtr ()
const StorageIndex * innerNonZeroPtr () const
bool isCompressed () const
Index nonZeros () const
StorageIndex * outerIndexPtr ()
const StorageIndex * outerIndexPtr () const
Scalar * valuePtr ()
const Scalar * valuePtr () const
- Общедоступные члены-функции, унаследованные от Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >
Index cols () const
const internal::eval< SparseMatrix< _Scalar, _Options, _StorageIndex > >::type eval () const
Index innerSize () const
bool isVector () const
const Product< SparseMatrix< _Scalar, _Options, _StorageIndex >, OtherDerived, AliasFreeProduct > operator* (const SparseMatrixBase< OtherDerived > &other) const
Index outerSize () const
const SparseView< SparseMatrix< _Scalar, _Options, _StorageIndex > > pruned (const Scalar &reference=Scalar(0), const RealScalar &epsilon=NumTraits< Scalar >::dummy_precision()) const
Index rows () const
Index size () const
SparseSymmetricPermutationProduct< SparseMatrix< _Scalar, _Options, _StorageIndex >, Upper|Lower > twistedBy (const PermutationMatrix< Dynamic, Dynamic, StorageIndex > &perm) const
- Общедоступные члены-функции, унаследованные от Eigen::EigenBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >
EIGEN_CONSTEXPR Index cols () const EIGEN_NOEXCEPT
SparseMatrix< _Scalar, _Options, _StorageIndex > & derived ()
const SparseMatrix< _Scalar, _Options, _StorageIndex > & derived () const
EIGEN_CONSTEXPR Index rows () const EIGEN_NOEXCEPT
EIGEN_CONSTEXPR Index size () const EIGEN_NOEXCEPT
- Публичные типы, унаследованные от Eigen::SparseMatrixBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >
typedef internal::traits< SparseMatrix< _Scalar, _Options, _StorageIndex > >::StorageIndex StorageIndex
typedef Scalar value_type
- Публичные типы, унаследованные от Eigen::EigenBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >
typedef Eigen::Index Index
Тип интерфейса для индексов. Подробнее...
- Защищенные члены-функции, унаследованные от Eigen::SparseCompressedBase< SparseMatrix< _Scalar, _Options, _StorageIndex > >
SparseCompressedBase ()

SparseMatrix() [1/5]

template<typename _Scalar , int _Options, typename _StorageIndex >
Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::SparseMatrix ( )
inline

Конструктор по умолчанию, создающий пустую 0 x 0 матрицу

SparseMatrix() [2/5]

template<typename _Scalar , int _Options, typename _StorageIndex >
Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::SparseMatrix ( Index rows,
Index cols
)
inline

Создаёт пустую матрицу размером rows x cols

SparseMatrix() [3/5]

template<typename _Scalar , int _Options, typename _StorageIndex >
template<typename OtherDerived >
Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::SparseMatrix ( const SparseMatrixBase< OtherDerived > & other )
inline

Создаёт разреженную матрицу из разреженного выражения other

SparseMatrix() [4/5]

template<typename _Scalar , int _Options, typename _StorageIndex >
template<typename OtherDerived , unsigned int UpLo>
Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::SparseMatrix ( const SparseSelfAdjointView< OtherDerived, UpLo > & other )
inline

Создаёт разреженную матрицу из разреженного самосопряжённого представления other

SparseMatrix() [5/5]

template<typename _Scalar , int _Options, typename _StorageIndex >
Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::SparseMatrix ( const SparseMatrix< _Scalar, _Options, _StorageIndex > & other )
inline

Копирующий конструктор (он выполняет глубокую копию)

~SparseMatrix()

template<typename _Scalar , int _Options, typename _StorageIndex >
Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::~SparseMatrix ( )
inline

Деструктор

coeff()

template<typename _Scalar , int _Options, typename _StorageIndex >
Scalar Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::coeff ( Index row,
Index col
) const
inline
Возвращает
значение матрицы в позиции i, j. Эта функция возвращает Scalar(0), если элемент является явным нулём.

coeffRef()

template<typename _Scalar , int _Options, typename _StorageIndex >
Scalar& Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::coeffRef ( Index row,
Index col
)
inline
Возвращает
непостоянную ссылку на значение матрицы в позиции i, j

Если элемент не существует, он вставляется с помощью функции insert(Index,Index), которая в свою очередь преобразует матрицу в не сжатую форму, если это не так.

Это операция сложности O(log(nnz_j)) (бинарный поиск) плюс стоимость функции insert(Index,Index), если элемент не существует уже.

cols()

template<typename _Scalar , int _Options, typename _StorageIndex >
Index Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::cols ( void ) const
inline
Возвращает
количество столбцов матрицы

conservativeResize()

template<typename _Scalar , int _Options, typename _StorageIndex >
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::conservativeResize ( Index rows,
Index cols
)
inline

Изменяет размер матрицы на rows x cols, сохраняя старые значения.

Если размеры матрицы уменьшаются, то матрица переходит в режим uncompressed, и хранение вне диапазона коэффициентов сохраняется и резервируется. Вызовите makeCompressed(), чтобы упаковать записи и освободить дополнительную память.

См. также
reserve(), setZero(), makeCompressed()

diagonal() [1/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
DiagonalReturnType Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::diagonal ( )
inline
Возвращает
чтение-запись выражения диагональных коэффициентов.
Предупреждение
Если элементы диагонали будут изменены, то все диагональные элементы должны существовать, в противном случае будет выведено утверждение.

diagonal() [2/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
const ConstDiagonalReturnType Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::diagonal ( ) const
inline
Возвращает
постоянное выражение диагональных коэффициентов.

innerIndexPtr() [1/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
StorageIndex* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::innerIndexPtr ( )
inline
Возвращает
указатель на массив внутренних индексов. Данная функция предназначена для взаимодействия с другими библиотеками.
См. также
valuePtr(), outerIndexPtr()

innerIndexPtr() [2/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
const StorageIndex* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::innerIndexPtr ( ) const
inline
Возвращает
указатель на постоянный массив внутренних индексов. Данная функция предназначена для взаимодействия с другими библиотеками.
См. также
valuePtr(), outerIndexPtr()

innerNonZeroPtr() [1/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
StorageIndex* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::innerNonZeroPtr ( )
inline
Возвращает
непостоянный указатель на массив количества ненулевых элементов внутренних векторов. Данная функция предназначена для взаимодействия с другими библиотеками.
Предупреждение
возвращает нулевой указатель 0 в сжатом режиме

innerNonZeroPtr() [2/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
const StorageIndex* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::innerNonZeroPtr ( ) const
inline
Возвращает
постоянный указатель на массив количества ненулевых элементов внутренних векторов. Данная функция предназначена для взаимодействия с другими библиотеками.
Предупреждение
возвращает нулевой указатель 0 в сжатом режиме

innerSize()

template<typename _Scalar , int _Options, typename _StorageIndex >
Index Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::innerSize ( ) const
inline
Возвращает
количество строк (соответственно столбцов) матрицы, если порядок хранения столбцовый (соответственно строчный)

insert()

template<typename _Scalar , int _Options, typename _StorageIndex >
SparseMatrix< _Scalar, _Options, _StorageIndex >::Scalar & Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::insert ( Index row,
Index col
)
Возвращает
ссылку на новый ненулевой коэффициент с координатами row x col. Не должен существовать ненулевой коэффициент.

Если матрица *this находится в сжатом режиме, то *this переключается на несжатый режим, резервируя место для 2 x this->innerSize() ненулевых элементов, если reserve(Index) не вызывался ранее. В этом случае процедура вставки оптимизирована для последовательного режима вставки, где предполагается, что элементы вставляются по возрастанию внешних индексов.

Если это не так, настоятельно рекомендуется либо использовать список троек для сборки матрицы, либо предварительно вызвать reserve(const SizesType &) для резервирования необходимого количества ненулевых элементов на каждый внутренний вектор.

Предполагая, что память должным образом зарезервирована, эта функция выполняет сортированную вставку в O(1), если элементы каждого внутреннего вектора вставляются в порядке возрастания внутреннего индекса, и в O(nnz_j) для случайной вставки.

isCompressed()

template<typename _Scalar , int _Options, typename _StorageIndex >
bool Eigen::SparseCompressedBase< Derived >::isCompressed
inline
Возвращает
является ли *this в сжатой форме.

makeCompressed()

template<typename _Scalar , int _Options, typename _StorageIndex >
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::makeCompressed ( )
inline

Преобразует матрицу в сжатый формат.

nonZeros()

template<typename _Scalar , int _Options, typename _StorageIndex >
Index Eigen::SparseCompressedBase< Derived >::nonZeros
inline
Возвращает
количество ненулевых коэффициентов

outerIndexPtr() [1/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
StorageIndex* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::outerIndexPtr ( )
inline
Возвращает
указатель на массив стартовых позиций внутренних векторов. Данная функция предназначена для взаимодействия с другими библиотеками.
См. также
valuePtr(), innerIndexPtr()

outerIndexPtr() [2/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
const StorageIndex* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::outerIndexPtr ( ) const
inline
Возвращает
указатель на постоянный массив стартовых позиций внутренних векторов. Данная функция предназначена для взаимодействия с другими библиотеками.
См. также
valuePtr(), innerIndexPtr()

outerSize()

template<typename _Scalar , int _Options, typename _StorageIndex >
Index Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::outerSize ( ) const
inline
Возвращает
количество столбцов (соответственно строк) матрицы, если порядок хранения столбцовый (соответственно строчный)

prune() [1/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
template<typename KeepFunc >
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::prune ( const KeepFunc & keep = KeepFunc() )
inline

Преобразует матрицу в сжатый формат и подавляет все ненулевые элементы, которые не удовлетворяют предикату keep. Тип функтора KeepFunc должен реализовывать следующую функцию:

bool operator() (const Index& row, const Index& col, const Scalar& value) const;
См. также
prune(Scalar,RealScalar)

prune() [2/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::prune ( const Scalar & reference,
const RealScalar & epsilon = NumTraits<RealScalar>::dummy_precision()
)
inline

Подавляет все ненулевые элементы, которые значительно меньше reference с толерантностью epsilon.

reserve() [1/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
template<class SizesType >
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::reserve ( const SizesType & reserveSizes )
inline

Предварительно выделяет reserveSize[j] ненулевых элементов для каждого столбца (соответственно, строки) j.

Эта функция переводит матрицу в нескомпрессированный режим.

Тип SizesType должен предоставлять следующий интерфейс:

typedef value_type;
const value_type& operator[](i) const;

для i в диапазоне [0,this->outerSize()[. Типичные варианты включают std::vector<int>, Eigen::VectorXi, Eigen::VectorXi::Constant и т. д.

reserve() [2/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::reserve ( Index reserveSize )
inline

Предварительно выделяет reserveSize ненулевых элементов.

Предварительное условие: матрица должна быть в сжатом режиме.

resize()

template<typename _Scalar , int _Options, typename _StorageIndex >
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::resize ( Index rows,
Index cols
)
inline

Изменяет размер матрицы на rows x cols и инициализирует её нулями.

Эта функция не освобождает текущую выделенную память. Чтобы освободить как можно больше памяти, вызовите

mat.data().squeeze(); 

после изменения размера.

См. также
reserve(), setZero()

rows()

template<typename _Scalar , int _Options, typename _StorageIndex >
Index Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::rows ( void ) const
inline
Возвращает
число строк матрицы

setFromTriplets() [1/2]

template<typename Scalar , int _Options, typename _StorageIndex >
template<typename InputIterators >
void Eigen::SparseMatrix< Scalar, _Options, _StorageIndex >::setFromTriplets ( const InputIterators & begin,
const InputIterators & end
)

Заполняет матрицу *this списком троек, определённых диапазоном итераторов begin - end.

Тройка — это тройка (i,j,значение), определяющая ненулевой элемент. Список входящих троек не обязательно должен быть отсортирован и может содержать дублируемые элементы. В любом случае результатом является отсортированная и сжатая разреженная матрица, где дубликаты суммируются. Это операция O(n), где n — количество элементов тройки. Начальное содержимое *this уничтожается. Матрица *this должна быть предварительно должным образом изменена с помощью конструктора SparseMatrix(Index,Index) или метода resize(Index,Index). Размеры не извлекаются из списка троек.

Тип InputIterators value_type должен предоставлять следующий интерфейс:

Scalar value() const; // the value
Scalar row() const;   // the row index i
Scalar col() const;   // the column index j

Например, шаблон класса Eigen::Triplet.

Вот пример типичного использования:

typedef Triplet<double> T;
std::vector<T> tripletList;
tripletList.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!
Предупреждение
Список троек читается несколько раз (по крайней мере дважды). Поэтому не рекомендуется определять абстрактную итерацию над сложной структурой данных, вычисление которой будет дорогостоящим. Вместо этого тройки лучше явным образом сохранить, например, в std::vector.

setFromTriplets() [2/2]

template<typename Scalar , int _Options, typename _StorageIndex >
template<typename InputIterators , typename DupFunctor >
void Eigen::SparseMatrix< Scalar, _Options, _StorageIndex >::setFromTriplets ( const InputIterators & begin,
const InputIterators & end,
DupFunctor dup_func
)

То же самое, что и setFromTriplets, но при обнаружении дубликатов применяется функтор dup_func:

value = dup_func(OldValue, NewValue)

Вот пример на C++11, сохраняющий только последнюю запись:

mat.setFromTriplets(triplets.begin(), triplets.end(), [] (const Scalar&,const Scalar &b) { return b; });

setIdentity()

template<typename _Scalar , int _Options, typename _StorageIndex >
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::setIdentity ( )
inline

Устанавливает *this в единичную матрицу. Эта функция также переводит матрицу в сжатый режим и удаляет любые зарезервированные области памяти.

setZero()

template<typename _Scalar , int _Options, typename _StorageIndex >
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::setZero ( )
inline

Удаляет все ненулевые элементы, но сохраняет выделенную память.

Эта функция не освобождает текущую выделенную память. Чтобы освободить как можно больше памяти, вызовите

mat.data().squeeze(); 

после изменения размера.

См. также
resize(Index,Index), data()

sum()

template<typename _Scalar , int _Options, typename _Index >
internal::traits< SparseMatrix< _Scalar, _Options, _Index > >::Scalar Eigen::SparseMatrix< _Scalar, _Options, _Index >::sum

Перегрузка для повышения производительности

swap()

template<typename _Scalar , int _Options, typename _StorageIndex >
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::swap ( SparseMatrix< _Scalar, _Options, _StorageIndex > & other )
inline

Меняет содержимое двух разреженных матриц одного типа. Это быстрая операция, которая просто меняет подлежащие указатели и параметры.

uncompress()

template<typename _Scalar , int _Options, typename _StorageIndex >
void Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::uncompress ( )
inline

Переводит матрицу в несжатый режим

valuePtr() [1/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
Scalar* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::valuePtr ( )
inline
Возвращает
ссылку на массив значений. Эта функция предназначена для взаимодействия с другими библиотеками.
См. также
innerIndexPtr(), outerIndexPtr()

valuePtr() [2/2]

template<typename _Scalar , int _Options, typename _StorageIndex >
const Scalar* Eigen::SparseMatrix< _Scalar, _Options, _StorageIndex >::valuePtr ( ) const
inline
Возвращает
постоянную ссылку на массив значений. Эта функция предназначена для взаимодействия с другими библиотеками.
См. также
innerIndexPtr(), outerIndexPtr()

The documentation for this class was generated from the following files:
  • SparseMatrix.h
  • SparseRedux.h

© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/classEigen_1_1SparseMatrix.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API