我有一個不斷增長的數據庫,其形式爲Eigen::MatrixXd
。我的矩陣開始爲空,並逐行添加行,直到它達到最大預定義(在編譯時已知)行數。如何爲不斷增長的Eigen預先分配內存:: MatrixXd
目前我長大這樣說,這(從本徵文檔和這裏的許多職位和其他地方):
MatrixXd new_database(database.rows()+1, database.cols());
new_database << database, new_row;
database = new_database;
但這似乎這樣更低效比它需要的,因爲它使得很多每次添加新行時無用的內存重新分配和數據複製...看起來像我應該能夠預先分配一堆尺寸爲MAX_ROWS*N_COLS
的內存並讓矩陣在其中增長,但是我無法找到與std::vector
的capacity
與Eigen。
注:我可能需要在實際滿之前隨時使用矩陣。所以我確實需要區分它的size
和capacity
。
我該怎麼做?
編輯1:我看到有一個MaxSizeAtCompileTime
,但我發現文檔,而沒有實例不清楚。任何人都知道如果這是要走的路,如何使用這個參數,以及它如何與resize
和conservativeResize
交互?
編輯2:C++: Eigen conservativeResize too expensive?提供同時提高了關於不連續的數據問題,另一種有趣的方法...任何人對這個問題的一些很好的啓示?
爲什麼不使用std :: vector? – Nandu
,因爲我在做矩陣乘法。我曾想過使用'Eigen :: Vector'的std :: vector,但我認爲將Eigen :: Matrix乘以Eigen :: Vector將會比使用多個點積更加高效一個'Eigen :: Vector'在for循環中,然後用結果填充一個新的'Eigen :: Vector' ... – Julien
該文檔提到保留矩陣值的conservativeResize函數。至少它可以幫助您避免從頭開始編碼調整大小。不知道它是否有更好的表現。 –