如何将静态二维数组转换为本征

时间:2019-05-04 09:20:19

标签: c++ eigen

不好意思,我是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);

非常感谢您!

1 个答案:

答案 0 :(得分:0)

Eigen::Map<>的构造函数重载的语义仅允许将“原始”数组映射到其等效特征,但不允许映射原始数组的原始数组(即2D原始数组)。

要将2D数组转换为等效的Eigen等效项,您需要将前者表示为1D原始数组,

double matr1[100 * 100];

例如参见以下有关如何轻松将2D数组的逻辑映射到1D数组的问答: