是否 Eigen有存储密集、固定大小、对称矩阵的有效类型吗? (嘿,它们无处不在!)
即对于 N=9,它应该只存储 (1+9)*9/2==45 个元素并且它有适当的操作。例如,应该有效地添加两个对称矩阵,返回相似的对称矩阵。
如果没有这样的事情,我应该采取哪些行动(看起来像 this )将这种类型引入 Eigen?它有“ View ”的概念吗?我可以为我自己的类型编写类似“矩阵 View ”的东西,这会使其成为 Eigen-friednly 吗?
附:可能我可以使用 map 将普通数组视为 1xN 矩阵, 并对其进行操作。但这不是最干净的解决方案。
最佳答案
Packed storage对称矩阵是矢量化代码的大敌人,即速度。 标准做法是将相关的 N*(N+1)/2 系数存储在全密集 NxN 矩阵的上三角或下三角部分中,而剩余的 (N-1)*N/2 不被引用。然后通过考虑这种特殊的存储来定义对称矩阵上的所有操作。在 Eigen 中,您有 triangular and self-adjoint views 的概念获得这个。
来自 eigen引用:(对于实矩阵 selfadjoint==symmetric)。
Just as for triangular matrix, you can reference any triangular part of a square matrix to see it as a selfadjoint matrix and perform special and optimized operations. Again the opposite triangular part is never referenced and can be used to store other information.
除非内存是一个大问题,否则我建议将矩阵中未引用的部分留空。 (更易读的代码,没有性能问题。)
关于c++ - 密集对称矩阵的特征有效类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13403982/