繁体   English   中英

矩阵向量乘积就像Eigen中的乘法

[英]Matrix-vector product like multiplication in Eigen

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

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向量一样乘以achive:

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

这已被问过很多次了,你想要缩放:

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

或使用广播:

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

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

至少有两种方法可以实现这一目标:

  • 迭代A每一列,用B做一个元素方面的产品(在本征中称为系数方面的产品)
  • B矢量复制到与A大小相同的矩阵中,并在A和从矢量B获得的新矩阵之间执行元素乘积。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM