【问题标题】:How to multiply matrix with another matrix rowwise in Eigen? [duplicate]如何在 Eigen 中将矩阵与另一个矩阵逐行相乘? [复制]
【发布时间】:2018-11-18 14:41:07
【问题描述】:

我需要将两个矩阵逐行相乘。我正在尝试重新创建 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) 访问一行。另外,请提及除文档之外的任何资源,这些资源可以快速阅读有关如何进行本征广播和其他有用操作的信息。我很难快速编写自己的代码。谢谢。

【问题讨论】:

  • 您希望得到的矩阵大小是多少?
  • 对两个数组的元素乘积的每一行求和。
  • 哦,auto 也不做计算,你必须把它分配给一个 MatrixXf。
  • @Rzu 好的,我会试试这个。 @Matthieu Brucher 我想要一个10x1 矩阵
  • 谢谢它的工作。

标签: c++ matrix eigen eigen3


【解决方案1】:

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

简而言之,您也可以将其视为提取普通产品的对角线:

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

由于惰性求值,只计算对角线系数,没有开销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 2019-11-15
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    相关资源
    最近更新 更多