我经常这样做:
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_conj
或f.conjugate()
是完全一样的。由于将两个复合体或一个复合体与一个共轭复合体相乘的成本相同,因此在这种情况下可以使用auto关键字。但是,如果f_conj
是例如:auto f_conj = (f+g).conjugate()
,那么f+g
将在for循环中被重新计算多次。执行(f+g).conjugate().asDiagonal() * X
是完全可以的,因为Eigen知道该怎么做。