我经常这样做:
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
不是 a VectorXcf
,而是 a 的共轭表达式VectorXcf
。所以使用f_conj
orf.conjugate()
是完全一样的。由于将两个复数或一个复数和一个共轭复数相乘的成本相同,因此在这种精确的情况下,可以使用 auto 关键字。但是,如果f_conj
是例如:auto f_conj = (f+g).conjugate()
,那么f+g
将在您的 for 循环中多次重新计算。不过,做(f+g).conjugate().asDiagonal() * X
是非常好的,因为 Eigen 知道该做什么。