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