将每个(稀疏)矩阵行按其对应的对角线元素进行除法运算 - Eigen

3
在C++中使用Eigen库,给定一个稀疏矩阵A,计算一个稀疏矩阵B的最有效方法是什么(按行操作?如何操作?),使得B(i,j)=A(i,j)/A(i,i)。也就是说,将每行i除以相应的对角线元素A(i,i)。 同时了解如何进行原地(in-place)操作(替换A中的条目)和非原地(out-of-place)操作(创建新的稀疏矩阵B)将会很有帮助。
我的稀疏矩阵定义为:
typedef double Real;
typedef Eigen::SparseMatrix<Real> SparseMatrixR;

谢谢您,
m.
1个回答

5

换句话说,您希望提取A的对角线,将其视为对角矩阵,并将其逆应用于A:

A = A.diagonal().asDiagonal().inverse() * A;

如果A是行优先排列,那么这个操作应该会更加高效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接