【问题标题】:Matrix-vector product like multiplication in Eigen矩阵向量乘积,如 Eigen 中的乘法
【发布时间】:2018-01-08 18:18:54
【问题描述】:

我目前正面临这个问题。 我有两个矩阵 MatrixXf 答:

0.5 0.5 0.5 0.5 0.694496 0.548501 0.680067 0.717111 0.362112 0.596561 0.292028 0.370271 0.56341 0.642395 0.467179 0.598476

和B

0.713072 0.705231 0.772228 0.767898

我想像矩阵 x 向量一样将它们相乘以实现:

0.5*0.713072 0.5*0.713072 0.5*0.713072 0.5*0.713072 0.694496*0.705231 0.548501*0.705231 0.680067*0.705231 0.717111*0.705231 0.362112*0.772228 0.596561*0.772228 0.292028*0.772228 0.370271*0.772228 0.56341*0.767898 0.642395*0.767898 0.467179*0.767898 0.598476*0.767898

在 Eigen 中是否有这样做的选项?怎么能做到这一点? http://mathinsight.org/matrix_vector_multiplication

【问题讨论】:

    标签: c++ matrix eigen


    【解决方案1】:

    这个问题已经问了很多次了,你想要一个缩放:

    MatrixXf A;
    VectorXf B;
    MatrixXf res = B.asDiagonal() * A;
    

    或使用广播:

    res = A.array().colwise() * B.array();
    

    【讨论】:

      【解决方案2】:

      简而言之,您希望在A 的每一列和向量B 之间进行元素乘积。

      至少有两种方法可以做到这一点:

      • 遍历A 的每一列以与B 进行元素乘积(在特征中称为系数乘积)
      • 将B 向量复制到与A 大小相同的矩阵中,并在A 和从向量B 获得的新矩阵之间进行逐元素乘积。

      这是一个基于 Eigen 的 cwiseProduct() 和 replicate() 函数的快速而肮脏的示例:

      auto C = A.cwiseProduct( B.replicate<1,4>() );
      

      【讨论】:

      • 小心,这里强烈建议不要使用auto,见why。
      • 我已经将您的想法用于复制,但它没有按我的意愿工作。我会尝试迭代。谢谢大家的回答。
      猜你喜欢
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多