我不知道是否以及如何将二维双精度数组映射到Eigen :: Matrix。是否可以将double d[][]我收到的数组映射double** p到Eigen :: Matrix?
虽然一维数组可以正常工作,但我无法映射p到Eigen::Map<Eigen::Matrix<double, n, n>>。那有可能吗,怎么办呢?大小n不是真的恒定,但是我可以接受硬编码的大小。
我尝试了多个版本,但没有一个起作用。我认为以下应该工作(假设大小n为4)。
Eigen::Map<Eigen::Matrix<double, 4, 4>> p_OUTPUT(&p[0][0]);
Run Code Online (Sandbox Code Playgroud)
该代码可以编译并运行,但是只有第一列的元素和第二列的第一元素映射正确的值。使用p[0]作为参数会产生相同的结果。我尝试过的其他版本(例如,没有&)没有编译。
为了完整起见,我找到了解决方案。如此处或此处所述,不连续内存中的存储是问题所在。
以下解决方案为我工作。
Eigen::MatrixXd ConvertToEigenMatrix(std::vector<std::vector<double>> data)
{
Eigen::MatrixXd eMatrix(data.size(), data[0].size());
for (int i = 0; i < data.size(); ++i)
eMatrix.row(i) = Eigen::VectorXd::Map(&data[i][0], data[0].size());
return eMatrix;
}
Run Code Online (Sandbox Code Playgroud)