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ここで、それはではなく、VectorXcfの共役の表現であることを強調しておきますVectorXcf。したがって、f_conjまたはを使用することf.conjugate()はまったく同じです。2つの複素数または1つの複素数と1つの共役複素数を乗算すると同じコストになるため、この正確なケースでは、autoキーワードを使用しても問題ありません。ただし、f_conjたとえば次の場合はauto f_conj = (f+g).conjugate()f+gforループで何度も再計算されます。Eigen(f+g).conjugate().asDiagonal() * Xは何をすべきかを知っているので、それでもまったく問題ありません。

于 2013-03-02T08:56:09.897 に答える