在 Eigen 中乘以对角矩阵(以向量形式提供)
Multiplying by diagnonal matrix (provided as vector) in Eigen
给定一个矩阵 A
和一个表示对角矩阵 D 的对角线的向量 d
,什么是最好的(即最简单而不影响性能)D*[= 的特征表达式10=] 只有 d
和 A
?
构造D
(作为密集矩阵)并执行D*A
似乎效率低下,因为它会涉及不必要的零乘法。 A
的行只需要按 d
.
的相应元素进行缩放
我应该转换为数组并缩放行,还是 Eigen 提供对角矩阵的构造和相乘以避免不必要的开销?
您可以使用 Eigen::DiagonalMatrix
作为 suggested. Alternatively, if you're already given an Eigen::Vector
(or Map
), you can use d.asDiagonal()
,如下所示:
Eigen::VectorXf d;
Eigen::MatrixXf a, b;
b = d.asDiagonal() * a;
给定一个矩阵 A
和一个表示对角矩阵 D 的对角线的向量 d
,什么是最好的(即最简单而不影响性能)D*[= 的特征表达式10=] 只有 d
和 A
?
构造D
(作为密集矩阵)并执行D*A
似乎效率低下,因为它会涉及不必要的零乘法。 A
的行只需要按 d
.
我应该转换为数组并缩放行,还是 Eigen 提供对角矩阵的构造和相乘以避免不必要的开销?
您可以使用 Eigen::DiagonalMatrix
作为 Eigen::Vector
(or Map
), you can use d.asDiagonal()
,如下所示:
Eigen::VectorXf d;
Eigen::MatrixXf a, b;
b = d.asDiagonal() * a;