不好意思,我是C ++的初学者。所以我不使用指针。我需要将C ++的静态2D数组转换为Eigen库格式。因为这是我的应用问题,所以我需要计算一个大矩阵的特征值和特征向量。
我的代码类似于
double matr1[100][100];
MatrixXd copy_matr1;
for (int i = 0; i < 100; i++)
for (int j = 0; j < 100; j++)
matr1[i][j] = i + j;
copy_matr1 = Map<MatrixXd>(matr1);
或(用最后一行替换下一行)
copy_matr1 = Map<MatrixXd>(matr1, 100, 100);
但是最后一行是错误的。正确的表示法是什么?
但是下面的代码(将C ++的静态1d数组转换为Eigen库格式)是正确的。我不明白上一个代码片段在哪里出错。
double arr1[100];
MatrixXd copy_arr1;
for (int i = 0; i < 100; i++)
arr1[i] = i + 10;
copy_arr1 = Map<MatrixXd>(arr1);
或(用最后一行替换下一行)
copy_arr1 = Map<MatrixXd>(arr1, 100);
非常感谢您!
答案 0 :(得分:0)
Eigen::Map<>
的构造函数重载的语义仅允许将“原始”数组映射到其等效特征,但不允许映射原始数组的原始数组(即2D原始数组)。
要将2D数组转换为等效的Eigen等效项,您需要将前者表示为1D原始数组,
double matr1[100 * 100];
例如参见以下有关如何轻松将2D数组的逻辑映射到1D数组的问答: