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 - 将每个(稀疏)矩阵行除以其对应的对角线元素的主要内容,如果未能解决你的问题,请参考以下文章

稀疏矩阵及其压缩格式

为啥我的 Eigen 代码不能随更多线程扩展

使用 Eigen3 的稀疏矩阵的特征值

避免使用 Eigen 分解稀疏矩阵时的动态内存分配

Eigen库矩阵和向量的运算

设计算法,将m*n稀疏矩阵转换成三元组表示,并分析其时间复杂度和空间复杂度