Ich mag würde jede Zeile einer Matrix M
ohne Kopie replizieren auftritt (dh durch Erstellen einer Ansicht):Eigen: Replizieren (broadcast) durch Reihen
0 1 0 1
2 3 -> 0 1
2 3
2 3
M.rowwise().replicate(n)
ist ein shorcut fürM.replicate(1,n)
das scheint irgendwie nutzlos.Das folgende Snippet erstellt eine Kopie und funktioniert nicht, wenn
M
ein Ausdruck ist.
Eigen::Index rowFactor = 2; Eigen::MatrixXi M2 = Eigen::Map(M.data(), 1, M.size()).replicate(rowFactor, 1); M2.resize(M.rows()*rowFactor, M.cols()) ;
- In einigen Situation kann ich die Zwischenansicht
Eigen::Map<Eigen::MatrixXi>(M.data(), 1, M.size()).replicate(rowFactor, 1)
durch Umformen die anderen Operanden verwenden, aber das ist nicht sehr befriedigend.
Gibt es einen richtigen Weg, um diese Broadcast-Ansicht zu erreichen?
Schöne Lösung, obwohl ein temporärer Vektor und Multiplikationen verwendet werden. Ich muss prüfen, ob dieses Produkt träge ist. – YvesgereY
Das 'Vector2i :: Ones()' wird nicht explizit generiert. Es wird tatsächlich eine Multiplikation passieren, aber ich bin zuversichtlich, dass der Compiler zumindest für ganze Zahlen in der Lage sein wird, dies zu optimieren. Wenn Sie 100% sicher sein wollen, dass keine Multiplikation stattfindet, schauen Sie sich die Implementierung von KroneckerProduct an. – chtz
Sie haben Recht. Sogar die dynamische Version 'VectorXi :: Ones (size)' gibt einen optimierten 'konstanten' Vektor zurück. – YvesgereY