4
爲了靈活性,我使用C++庫Eigen將數據加載到動態大小的矩陣(例如Eigen::MatrixXf
)中。我寫了一些函數需要混合或固定大小的矩陣作爲參數(例如Eigen::Matrix<float, 3, Eigen::Dynamic>
或Eigen::Matrix4f
)。假設我對行和列的大小做了正確的斷言,我怎樣才能將動態矩陣(在運行時設置的大小)轉換爲固定矩陣(在編譯時設置的大小)?在特徵中將動態矩陣轉換爲固定矩陣
我能想到的唯一的辦法是進行映射,例如:
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());
但它是我不清楚這是否會工作,要麼是因爲固定大小的地圖構造函數不接受行和列參數在the docs。有更好的解決方案嗎?簡單地將動態分配給固定大小的矩陣不起作用。
使用動態大小的靈活性,然後鑄造到固定大小調用函數聽起來像一個矛盾。你真的需要輸入是動態大小嗎?我的意思是,無論如何,你的功能似乎預計一定的規模...... – user463035818
@ tobi303:原因是我對不同的數據集合使用相同的加載函數。然後,根據我所加載的數據的不同,我調用需要混合或固定大小作爲參數的處理函數(由於typedef)。 – marcman
是的,這應該起作用。不是在最近的版本(至少從3.2.9),你應該能夠不使用'Eigen :: Map'。 – m7913d