2013-03-01 6 views

Antwort

5

Was Sie wirklich tun, ist ein diagonal Produkt, also würde ich Ihnen den folgenden Ausdruck empfehlen:

C = f.conjugate().asDiagonal() * X; 

Wenn Sie einen colwise() Ausdruck verwenden möchten, dann tun Sie es nicht auf der linken Seite setzen Handseite:

C = X.colwise().cwiseProduct(f.conjugate()); 

Darüber hinaus möchte ich Sie vor der Verwendung des Auto-Schlüsselwortes warnen. Hier möchte ich betonen, dass f_conj kein VectorXcf ist, sondern eine Expression des Konjugats eines VectorXcf. So ist f_conj oder genau das gleiche. Da zwei Komplexe oder eine komplexe und eine konjugierte komplexe Menge zu denselben Kosten multipliziert werden, ist es in diesem konkreten Fall in Ordnung, das Schlüsselwort auto zu verwenden. Wenn jedoch f_conj zum Beispiel wäre: , dann würde f+g viele Male in Ihrer for-Schleife neu berechnet werden. Doing (f+g).conjugate().asDiagonal() * X ist aber völlig in Ordnung, weil Eigen weiß, was zu tun ist.

+0

Wahr, dachte nicht darüber als die Diagonale einer Matrixmultiplikation. Ich nehme an, wegen der Lesbarkeit schlagen Sie die erste vor? Oder würde ich auch Leistung bekommen? –

+2

meist für Lesbarkeit, bu auch für die Leistung in Fall X ist eine Reihe-Haupt-Matrix. – ggael

+0

Gut zu wissen. Vielen Dank. –