我不確定你想要什麼,但我會嘗試解釋。
您在代碼中混合了double和float(MatrixXf是一個矩陣,其中每個條目都是一個float)。目前我會假設這是無意的,你想在任何地方使用雙重的;請參閱下文,瞭解這是否真的是您的意圖。
指令Map<MatrixXd>(arrayd, n, n) = matrix
將條目matrix
複製到arrayd
。它相當於環
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
arrayd[i + j*n] = matrix(i, j);
向arrayd
條目複製到matrix
,你可以使用逆分配:matrix = Map<MatrixXd>(arrayd, n, n)
。
然而,通常可以採用以下的技術是更加有用:
void foo(MatrixXd matrix, int n) {
double* arrayd = matrix.data();
// do something with the array
}
現在arrayd點矩陣中的條目,並可以處理它作爲任何C++陣列。數據在matrix
和arrayd
之間共享,因此您不必在最後複製任何內容。順便說一下,您不需要將n
傳遞給函數foo()
,因爲它存儲在矩陣中;使用matrix.rows()和matrix.cols()來查詢它的值。
如果您確實想將MatrixXf複製到雙精度數組中,那麼您需要明確包含該精度。 Eigen中的語法是:Map<MatrixXd>(arrayd, n, n) = matrix.cast<double>()
。
這是什麼地圖<>功能?你能證明嗎? – 2012-08-17 10:13:13
這就是我所知道的http://eigen.tuxfamily.org/dox/TutorialMapClass.html – Manolete 2012-08-17 10:17:44