Eigen::RandomSetter
шаблон<typename SparseMatrixType, шаблон< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
класс Eigen::RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >
Класс RandomSetter — обёртка, позволяющая устанавливать/обновлять разреженную матрицу с произвольным доступом.
- Шаблонные параметры
-
SparseMatrixType тип разреженной матрицы, которую мы обновляем MapTraits класс свойств, представляющий реализацию отображения, используемого для временного хранения разреженной матрицы. Его значение по умолчанию зависит от системы. OuterPacketBits определяет количество строк (или столбцов), управляемых одним объектом отображения, как показатель степени двойки.
Этот класс временно представляет объект разреженной матрицы, используя общую реализацию отображения, что позволяет эффективно получать произвольный доступ. Преобразование из сжатого представления в объект hash_map выполняется в конструкторе RandomSetter, а обновление разреженной матрицы выполняется при уничтожении. Эта стратегия предполагает использование вложенных блоков, как в этом примере:
SparseMatrix<double> m(rows,cols);
{
RandomSetter<SparseMatrix<double> > w(m);
// don't use m but w instead with read/write random access to the coefficients:
for(;;)
w(rand(),rand()) = rand;
}
// when w is deleted, the data are copied back to m
// and m is ready to use.
Поскольку объекты hash_map не полностью отсортированы, представление полной матрицы как одного объекта hash_map потребовало бы большого и дорогостоящего сортирования для обновления сжатой матрицы обратно. Для решения этой проблемы RandomSetter использует несколько hash_map, каждый из которых представляет 2^OuterPacketBits столбцов или строк в соответствии с порядком хранения. Для достижения оптимальной производительности это значение следует настраивать в соответствии со средним числом ненулевых элементов на строку/столбец.
Возможные значения для шаблона MapTraits:
- StdMapTraits: соответствует std::map. (работает не очень хорошо)
- GnuHashMapTraits: соответствует __gnu_cxx::hash_map (доступен только с GCC)
- GoogleDenseHashMapTraits: соответствует google::dense_hash_map (лучшая эффективность, разумное потребление памяти)
- GoogleSparseHashMapTraits: соответствует google::sparse_hash_map (лучшее потребление памяти, относительно хорошая производительность)
Реализация отображения по умолчанию зависит от доступности и предпочтительный порядок: GoogleSparseHashMapTraits, GnuHashMapTraits и, наконец, StdMapTraits.
По соображениям производительности и потребления памяти настоятельно рекомендуется использовать одну из реализаций hash_map Google. Чтобы включить их поддержку, необходимо определить EIGEN_GOOGLEHASH_SUPPORT. Это включит как <google/dense_hash_map>, так и <google/sparse_hash_map>.
- См. также
- https://github.com/sparsehash/sparsehash
| Индекс | nonZeros () const |
| Скаляр & | operator() (Индекс строка, Индекс столбец) |
| RandomSetter (SparseMatrixType &target) | |
| ~RandomSetter () | |
RandomSetter()
| inline |
Конструирует объект random setter из разреженной матрицы target
Обратите внимание, что начальное значение target импортируется. Если вы хотите сбросить разреженную матрицу с нуля, сначала необходимо установить её в ноль, используя функцию setZero().
~RandomSetter()
| inline |
Деструктор, обновляющий обратно разреженную матрицу target
nonZeros()
| inline |
- Возвращает
- количество ненулевых коэффициентов
- Примечание
- В зависимости от реализации базового отображения/hash_map эта функция может быть довольно дорогостоящей.
operator()()
| inline |
- Возвращает
- ссылку на коэффициент в заданных координатах строка, столбец
Документация для этого класса была сгенерирована из следующего файла:
© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/unsupported/classEigen_1_1RandomSetter.html