如何在本征矩阵中将矩阵与另一个矩阵逐行相乘?

时间:2018-11-18 14:41:08

标签: c++ matrix eigen eigen3

我需要将两个矩阵逐行相乘。我正在尝试重新创建matlab的dot()操作,其中可以提到dim以执行每列/行乘法。

Eigen::MatrixXf mat_1 = Eigen::MatrixXf::Random(10, 3);
Eigen::MatrixXf mat_2 = Eigen::MatrixXf::Random(10, 3);

auto product_mat = mat_1.array().rowwise() * mat_2.array().rowwise().transpose();

这是我的尝试。我知道这是错误的,因为按行操作正在返回没有转置操作的类型,但是我不知道如何正确执行此操作。我不想运行循环并尽可能使用.row(i)访问行。另外,请提及除docs之外的任何资源,可以快速阅读有关如何进行本征广播和其他有用操作的信息。我很难快速编写自己的代码。谢谢。

1 个答案:

答案 0 :(得分:1)

这是Column-wise dot product in Eigen C++的副本。

简而言之,您还可以将其视为提取常规产品的对角线:

VectorXd res = (mat_1 * mat_2.tranpose()).diagonal();

感谢懒惰的评估,只计算对角线系数,没有开销。

相关问题