從雙** xarray開始,它有nrow和ncol。
xarray = new double *[nrow];
for (i = 0; i < nrow; i++)
xarray[i] = new double[ncol];
用數值填充它。
然後創建double * xtemparray,它是維度nrow * ncol的向量。
xtemparray = new double [nrow*ncol];
把xarray的值放到xtemparray中。
for (i = 0; i < nrow; i++) {
for (j = 0; j < ncol; j++)
xtemparray[nrow*i + j] = xarray[i][j];
}
聲明矩陣。
MatrixXd xmatrix(nrow, ncol);
然後,您可以將xtemparray映射到xmatrix。
xmatrix = Map<Matrix<double,Dynamic,Dynamic,RowMajor>>(xtemparray, nrow, ncol);
到矩陣映射回temparray:
Map<MatrixXd>(xtemparray, xmatrix.rows(), xmatrix.cols()) = xmatrix;
最後,您可以將xtemparray轉換後xarray。
for (i = 0; i < nrow; i++) {
for (j = 0; j < ncol; j++)
xpostarray[i][j] = xtemparray[nrow*i + j];
}
感謝您的回答,並對我遲到的回覆感到抱歉。但是,我認爲你誤解了我的問題,或者我不清楚。 x在我的文章中包含指向我在我的Eigen :: VectorXd中需要的變量的指針,即它們不是(必然)在連續的內存中。我希望* x [0]是vec中的第一個值,* x [1]第二個,等等。 – DoubleTrouble
因爲我希望使用Unsupported Levenerg Marquardt求解器,所以它並不重要,但它好像不是反正支持Eigen :: Maps。不過,我仍然很想知道我的OP是否可以解決。 – DoubleTrouble