如何将静态二维数组转换为特征值
Posted
技术标签:
【中文标题】如何将静态二维数组转换为特征值【英文标题】:How to convert static 2d array into Eigen 【发布时间】:2019-05-04 09:20:18 【问题描述】:对不起,我是 C++ 的初学者。所以我不使用指针。我需要将 C++ 的静态二维数组转换为 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++ 的静态一维数组转换为 Eigen 库格式)是正确的。我不明白之前的sn-p哪里出错了。
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);
非常感谢您!
【问题讨论】:
这可能会有所帮助:Map two-dimensional array to Eigen::Matrix 写关于 std:map 需要两个模板类的评论。意识到它在谈论 Eigen::Map。删除评论并慢慢后退... 【参考方案1】:Eigen::Map<>
的构造函数重载的语义只允许将“原始”数组映射到其 Eigen 等效项,但不允许映射原始数组的原始数组(即 2D 原始数组)。
要将您的 2D 数组转换为您的 Eigen 等效选择,您需要将前者表示为 1D 原始数组,
double matr1[100 * 100];
参见例如下面是关于如何轻松地将二维数组的逻辑映射到一维数组的问答:
How to map the indexes of a matrix to a 1-dimensional array (C++)?【讨论】:
以上是关于如何将静态二维数组转换为特征值的主要内容,如果未能解决你的问题,请参考以下文章