我正在做很多事情:
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)
代替?
答案 0 :(得分:6)
你真正做的是对角线产品,所以我建议你使用以下表达式:
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()
,则{for循环中将f+g
重新计算多次。尽管如此,做(f+g).conjugate().asDiagonal() * X
完全没问题,因为Eigen知道该怎么做。