Ich tue diese viel zu tun?Wie colwise Operationen in Eigen
Antwort
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.
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? –
meist für Lesbarkeit, bu auch für die Leistung in Fall X ist eine Reihe-Haupt-Matrix. – ggael
Gut zu wissen. Vielen Dank. –
Ich denke, es gibt einen kleinen Fehler in Ihrer Frage und das ist ein VectorXcf und kein MatrixXcf? – ggael
Das ist richtig. Danke für die Antwort. –