C++ 中 Eigen 的 DiagonalMatrix 类型的高效存储

Efficient Storage for Eigen's DiagonalMatrix type in C++

我想用密集矩阵和对角矩阵做矩阵乘法。对角矩阵是使用 vec.asDiagonal().

从向量生成的

我想知道 DiagonalMatrix 类型是否只存储对角线,或者它是否是除对角线外全为零的密集矩阵?我想 DiagonalMatrix 应该是 Eigen 的 SparseMatrix 的 child。我搜索了文档并找到了这个

https://eigen.tuxfamily.org/index.php?title=SpecialMatrix#Diagonal_matrix,表明 DiagonalMatrix 继承自 MatrixBase,而不是 SparseMatrix。这是否意味着内存存储效率低下?

DiagonalMatrix 仅将对角线存储为密集向量。 vec.asDiagonal()DiagonalMatrix 的 return 类型都继承自 DiagonalBase 而不是 MatrixBase (doc)。它们本质上是相同的:一个存储对密集向量的引用,而另一个是对角线向量的所有者。