私はこれをたくさんやっています:
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+g
forループで何度も再計算されます。Eigen(f+g).conjugate().asDiagonal() * X
は何をすべきかを知っているので、それでもまったく問題ありません。