Quello che state realmente facendo è un prodotto in diagonale, quindi vi consiglio della seguente espressione:
C = f.conjugate().asDiagonal() * X;
Se si desidera utilizzare un'espressione colwise(), quindi non metterlo a sinistra lato a mano:
C = X.colwise().cwiseProduct(f.conjugate());
Inoltre, lascia che ti avvisi circa l'uso della parola chiave auto. Qui, vorrei sottolineare che f_conj
non è un VectorXcf
, ma un'espressione del coniugato di un VectorXcf
. Quindi usare f_conj
o è esattamente lo stesso. Dal momento che moltiplica due complessi o un complesso e un complesso coniugato allo stesso costo, in questo caso preciso è ok usare la parola chiave auto. Tuttavia, se f_conj
fosse ad esempio: auto f_conj = (f+g).conjugate()
, quindi f+g
verrà ricalcolato più volte nel ciclo for. Fare lo (f+g).conjugate().asDiagonal() * X
è comunque perfetto, perché Eigen sa cosa fare.
Immagino ci sia un piccolo errore nella tua domanda e che f sia un VectorXcf e non un MatrixXcf? – ggael
Questo è corretto. Grazie per la risposta. –