2013-03-01 56 views
6

我做這個有很多:怎麼辦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) 

呢?

+0

我想你的問題有一個小錯誤,並且f是一個VectorXcf而不是MatrixXcf? – ggael 2013-03-02 08:58:48

+0

這是正確的。謝謝回覆。 – 2013-03-02 11:22:08

回答

5

你真的做什麼是對角的產品,所以我建議你下面的表達式:

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知道該怎麼做。

+0

沒錯,沒有把它看作矩陣乘法的對角線。我認爲它的可讀性是你建議的第一個?還是我也會獲得表現? – 2013-03-02 11:23:25

+2

主要爲了可讀性,在X是行主矩陣的情況下也用於性能。 – ggael 2013-03-02 21:05:51

+0

很高興知道。謝謝。 – 2013-03-03 21:26:44