我经常这样做:

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知道该怎么做。

10-08 08:25