在 Eigen 中乘以对角矩阵(作为向量提供)
Posted
技术标签:
【中文标题】在 Eigen 中乘以对角矩阵(作为向量提供)【英文标题】:Multiplying by diagnonal matrix (provided as vector) in Eigen 【发布时间】:2020-01-21 06:29:06 【问题描述】:给定一个矩阵A
和一个向量d
,它表示对角矩阵 D 的对角线,对于 D*A
而言,最好的(即不影响性能的最简单的)特征表达式是 @ 987654324@和A
?
构造D
(作为密集矩阵)并执行D*A
似乎效率低下,因为它会涉及不必要的零乘法。 A
的行只需要通过d
的对应元素进行缩放即可。
我应该转换为数组并缩放行还是 Eigen 提供对角矩阵以避免不必要开销的方式构造和相乘?
【问题讨论】:
有一个Eigen::DiagonalMatrix
类型。我想它应该符合你的需要
【参考方案1】:
您可以按照Damien 的建议使用Eigen::DiagonalMatrix
。或者,如果您已经获得了Eigen::Vector
(或Map
),您可以使用d.asDiagonal()
,如下所示:
Eigen::VectorXf d;
Eigen::MatrixXf a, b;
b = d.asDiagonal() * a;
【讨论】:
以上是关于在 Eigen 中乘以对角矩阵(作为向量提供)的主要内容,如果未能解决你的问题,请参考以下文章