12

How can you perform a element-wise multiplication in place using Eigen3?

Does

a = a.cwiseProduct(b);

run in place? Or is

a.array() *= b.array();

the better solution in terms of style and performance?

PhilLab
  • 4,777
  • 1
  • 25
  • 77

1 Answers1

13

Both expressions should generate the same code (with a reasonably optimizing compiler), so it is more a question of taste.

If you are doing mostly element-wise operations with a and b you should declare them as Eigen::Array (instead of Eigen::Matrix) and just write a*=b;. If you need to access a or b in a matrix-fashion later, you can still use a.matrix().

chtz
  • 17,329
  • 4
  • 26
  • 56