I am currently facing this problem. I have two matrixes 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
and B
0.713072 0.705231 0.772228 0.767898
I want to multiply them like matrix x vector to 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
Is there an option to do that in Eigen? How can do that a simply way? http://mathinsight.org/matrix_vector_multiplication
This has been asked so many times, you want a scaling:
MatrixXf A;
VectorXf B;
MatrixXf res = B.asDiagonal() * A;
or using broadcasting:
res = A.array().colwise() * B.array();
In short you want to do an element-wise product between each column of A and vector B.
There are at least two ways of accomplishing this:
A to do an element-wise product with B (in eigen referred to as coefficient-wise product)B vector into a matrix with the same size as A and perform an element-wise product between A and the new matrix obtained from vector B.Here's a quick and dirty example based on Eigen's cwiseProduct() and replicate() functions:
auto C = A.cwiseProduct( B.replicate<1,4>() );
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With