如何在本地区进行协同操作

How to do colwise operations in Eigen

本文关键字:操作 本地区      更新时间:2023-10-16

我经常这样做:

auto f_conj = f.conjugate(); //f is a MatrixXcf, so is C;
for(n=0;n<X.cols();++n)
    C.col(n) = X.col(n).cwiseProduct(f_conj);

难道我不能做像

这样的事情吗?
C.colwise() = X.colwise().cwiseProduct(f_conj)

?

你真正做的是对角积,所以我建议你使用下面的表达式:

C = f.conjugate().asDiagonal() * X;

如果要使用colwise()表达式,则不要将其放在左侧:

C = X.colwise().cwiseProduct(f.conjugate());

此外,让我警告您关于auto关键字的使用。这里,我要强调f_conj不是VectorXcf,而是VectorXcf的共轭表达式。所以用f_conjf.conjugate()是完全一样的。由于将两个复合体或一个复合体与一个共轭复合体相乘的成本相同,因此在这种情况下可以使用auto关键字。但是,如果f_conj是例如:auto f_conj = (f+g).conjugate(),那么f+g将在for循环中被重新计算多次。执行(f+g).conjugate().asDiagonal() * X是完全可以的,因为Eigen知道该怎么做。