我需要将两个矩阵逐行相乘。我正在尝试重新创建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之外的任何资源,可以快速阅读有关如何进行本征广播和其他有用操作的信息。我很难快速编写自己的代码。谢谢。
答案 0 :(得分:1)
这是Column-wise dot product in Eigen C++的副本。
简而言之,您还可以将其视为提取常规产品的对角线:
VectorXd res = (mat_1 * mat_2.tranpose()).diagonal();
感谢懒惰的评估,只计算对角线系数,没有开销。