c++ - 密集对称矩阵的特征有效类型

标签 c++ matrix linear-algebra eigen

是否 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/

相关文章:

c++ - 交付具有其他依赖项的 xcode 框架

python - numpy中分数的线性系统解决方案

python - Numpy、掩蔽和 sklearn 聚类

java - LWJGL 的 Matrix4f.mul 方法是乘法前还是乘法后?

用于计算矩阵指数的 C++ 库

math - LISP 中的向量计算

c++ - 如何准确阅读一行?

c++ - 套接字 C++ - 非阻塞或选择方法

c++ - 在 C++ 中处理线程的创建/重用

r - 在 R 中创建多个相同(相同维度)矩阵的列表