【发布时间】:2020-06-12 18:21:07
【问题描述】:
我有一个 Eigen Array2Xd,我想将它的每一行放入 std::vector<double>。
spline_knots 是一个大小为 (2, 4) 的 Array2Xd,具有以下值:
Array2Xd spline_knots(2, 4);
spline_knots << -1, 0, 30.57, 60.83,
0, 0, 9.73, 15.44;
我根据this answer尝试了以下:
vector<double> knot_xs(spline_knots.row(0).data(),
spline_knots.row(0).data() + spline_knots.row(0).size());
vector<double> knot_ys(spline_knots.row(1).data(),
spline_knots.row(1).data() + spline_knots.row(1).size());
但是尝试使用上面的代码将每一行复制到一个向量中,我得到以下结果,这很奇怪(第一行以正确的元素开始,然后是零;第二行只有零并以第一行):
kont_xs: -1 0 0 0
knot_ys: 0 0 0 30.57
这里出了什么问题,如何从二维数组的一行中创建向量没有循环?
【问题讨论】:
-
你试过循环版本,看看是否有效?您能否显示代码,让您知道
spline_knots实际上具有与向量中不同的值。 -
只要使用
.row(0).begin()和.row(0).end()(需要Eigen的master分支) -
@cigien 是的,循环版本有效。如前所述,
spline_knots具有正确的值(我使用cout打印它)。 -
@chtz 不幸的是,我的项目中似乎没有 Eigen 的主分支,我无法更改它。使用
row(0).begin()我得到错误class "Eigen::Block<Eigen::Array<double, 2, -1, 0, 2, -1>, 1, -1, false>" has no member "begin"。 -
好的,你能分享那个代码吗?知道没有发生什么太奇怪的事情会有所帮助。