Aus Gründen der Flexibilität lade ich Daten in dynamisch große Matrizen (z. B. Eigen::MatrixXf
) unter Verwendung der C++ - Bibliothek Eigen. Ich habe einige Funktionen geschrieben, die Matrizen gemischter oder fester Größe als Parameter benötigen (z. B. Eigen::Matrix<float, 3, Eigen::Dynamic>
oder Eigen::Matrix4f
). Angenommen, ich mache die richtigen Behauptungen für Zeilen- und Spaltengröße, wie kann ich die dynamische Matrix (zur Laufzeit festgelegte Größe) in eine feste Matrix konvertieren (Größe, die zur Kompilierungszeit gesetzt wird)?Umwandeln der dynamischen Matrix in eine feste Matrix in Eigen
Die einzige Lösung, die ich denken kann, ist es auf der Karte, zum Beispiel:
Eigen::MatrixXf dyn = Eigen::MatrixXf::Random(3, 100);
Eigen::Matrix<float, 3, Eigen::Dynamic> fixed =
Eigen::Map<float, 3, Eigen::Dynamic>(dyn.data(), 3, dyn.cols());
Aber es ist mir nicht klar, ob das wird entweder arbeiten, weil das feste Größe Karte Konstruktor akzeptiert keine Zeilen und Spalten als Parameter in the docs. Gibt es eine bessere Lösung? Die Zuweisung von Dynamic zu Matrizen mit fester Größe funktioniert nicht.
mit dynamischer Größe für Flexibilität und dann Casting auf feste Größe zum Aufruf einer Funktion klingt wie ein Widerspruch. Brauchen Sie wirklich die Eingabe als dynamische Größe? Ich meine jedenfalls deine Funktion scheint eine bestimmte Größe zu erwarten ... – user463035818
@ tobi303: Der Grund ist, dass ich die gleiche Ladefunktion für verschiedene Datensammlungen benutze. Dann, abhängig von den Daten, die ich geladen habe, rufe ich die Verarbeitungsfunktion auf, die die gemischte oder feste Größe als Parameter benötigt (wegen typedefs). – marcman
Ja, das sollte funktionieren. Nicht, dass es in neueren Versionen (mindestens ab 3.2.9) möglich wäre, dies zu tun, ohne 'Eigen :: Map' zu verwenden. – m7913d