如何访问对称特征矩阵的元素
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
.
我对对称矩阵的理解是 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
.