Eigen - 将每个(稀疏)矩阵行除以其对应的对角线元素
Posted
技术标签:
【中文标题】Eigen - 将每个(稀疏)矩阵行除以其对应的对角线元素【英文标题】:Eigen - divide each (sparse) matrix row by its corresponding diagonal element 【发布时间】:2014-05-28 12:07:54 【问题描述】:使用 C++ 中的 Eigen 库,给定一个稀疏矩阵 A
,计算稀疏矩阵 B
的最有效方法是什么(按行操作?如何?)使得 B(i, j) = A(i, j) / A(i, i)
?也就是说,将每一行 i
除以对应的对角元素 A(i, i)
。
了解如何就地(替换A
中的条目)和就地(创建新的稀疏矩阵B
)将很有帮助。
我的稀疏矩阵定义为:
typedef double Real;
typedef Eigen::SparseMatrix<Real> SparseMatrixR;
谢谢你, 米。
【问题讨论】:
【参考方案1】:换句话说,您想提取 A 的对角线,将其视为对角矩阵,并将其逆矩阵应用于 A:
A = A.diagonal().asDiagonal().inverse() * A;
如果 A 是 rowmajor,这个操作应该会更有效。
【讨论】:
以上是关于Eigen - 将每个(稀疏)矩阵行除以其对应的对角线元素的主要内容,如果未能解决你的问题,请参考以下文章