我目前正面临这个问题。 我有两个矩阵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向量一样乘以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
答案 0 :(得分:3)
这已被问过很多次了,你想要缩放:
MatrixXf A;
VectorXf B;
MatrixXf res = B.asDiagonal() * A;
或使用广播:
res = A.array().colwise() * B.array();
答案 1 :(得分:2)
简而言之,您希望在A
和向量B
的每一列之间执行按元素划分的产品。
至少有两种方法可以实现这一目标:
A
的每一列以使用B
(在本征中称为系数方式产品)执行元素方面的产品B
向量复制到与A
大小相同的矩阵中,并在A
和从向量B
获得的新矩阵之间执行元素乘积。 这是基于Eigen cwiseProduct()
和replicate()
函数的快速而肮脏的示例:
auto C = A.cwiseProduct( B.replicate<1,4>() );