Эффективное хранилище для типа Eigen's DiagonalMatrix в C ++ - PullRequest
0 голосов
/ 09 января 2020

Я хочу сделать умножение матриц с плотной матрицей и диагональной матрицей. Диагональная матрица генерируется из вектора с использованием vec.asDiagonal().

Мне интересно, хранит ли тип DiagonalMatrix только диагональ, или это плотная матрица, полная нулей, кроме диагонали? Я полагаю, что DiagonalMatrix должен быть дочерним по отношению к Eigen SparseMatrix. Я искал документацию и нашел это

https://eigen.tuxfamily.org/index.php?title=SpecialMatrix#Diagonal_matrix, предполагая, что DiagonalMatrix наследуется от MatrixBase, а не SparseMatrix. Означает ли это, что память неэффективна?

1 Ответ

2 голосов
/ 09 января 2020

DiagonalMatrix хранит только диагональ в виде плотного вектора. Типы возврата vec.asDiagonal() и DiagonalMatrix наследуются от DiagonalBase, а не MatrixBase ( do c). По сути, они одинаковы: один хранит ссылку на плотный вектор, тогда как другой является владельцем диагонального вектора.

...