如何访问对称特征矩阵的元素

How to access elements of symmetric Eigen matrix

我对对称矩阵的理解是 A(i,j) == A(j,i),但在 Eigen 中只定义了其中一个。我错过了什么?

下面是一个例子。我也尝试过各种变体,但似乎在其他地方看不到答案。我是否应该手动确保指数符合某些内部预期?

MatrixXf m(4, 4);  // uninitialized 4x4
auto v = m.selfadjointView<Upper>(); // I don't need triangular matrix, but ok by me to store it only once
int i = 1;
int j = 3;
v(i, j) = 3.0f; // either v(i,j) or v(j,i) is undefined. How can I permit both?
std::cout << "\n"
          << v(j, i);

通过 (i,j) 访问两半本质上不是 .selfadjointView<>() 的工作方式。支持这将需要 min/max 操作,对于复杂矩阵甚至是某种 proxy-object,每次访问都非常昂贵。

您应该只通过 () 运算符访问上半部分,然后您可以将 SelfadjointView 对象用作其他表达式的一部分,例如产品,或使用特殊方法,例如 rankUpdate.