我做這個有很多:怎麼辦colwise操作在本徵
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)
呢?
我做這個有很多:怎麼辦colwise操作在本徵
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
或是完全一樣的。由於將兩個複合物或一個複合物和一個共軛複數乘以相同的成本,在這種情況下,可以使用auto關鍵字。但是,如果f_conj
將是例如:auto f_conj = (f+g).conjugate()
,那麼f+g
將在您的for循環中重新計算多次。做(f+g).conjugate().asDiagonal() * X
雖然是完美的,因爲Eigen知道該怎麼做。
沒錯,沒有把它看作矩陣乘法的對角線。我認爲它的可讀性是你建議的第一個?還是我也會獲得表現? – 2013-03-02 11:23:25
主要爲了可讀性,在X是行主矩陣的情況下也用於性能。 – ggael 2013-03-02 21:05:51
很高興知道。謝謝。 – 2013-03-03 21:26:44
我想你的問題有一個小錯誤,並且f是一個VectorXcf而不是MatrixXcf? – ggael 2013-03-02 08:58:48
這是正確的。謝謝回覆。 – 2013-03-02 11:22:08