6

我经常这样做:

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)

反而?

4

1 回答 1

6

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

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

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

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

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

于 2013-03-02T08:56:09.897 回答