从Eigen Array2Xd的一行填充std :: vector 我有一个特征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 这里有什么问题,如何从2D数组的一行中创建矢量 无循环 ? 我有一个Eigen Array2Xd,我想将其每一行放入std :: vector 。 spline_knots是大小为(2,4)的Array2Xd,具有以下值:Array2Xd spline_knots(2,4); ... ] >> 想通了。问题与storage order有关,这是本征如何在内存中布置二维数组的方式。有两种可能的布局:RowMajor和ColumnMajor。默认布局为ColumnMajor,它按列存储2D数组元素。 知道这一点,我得到的奇怪结果是有道理的。 .row(0).data()将指针返回到第一行的第一元素。 .row(0).size()为4,.row(0).data() + 4沿列取前四个元素:[-1, 0, 0, 0]。第二个列的相同参数从(1,0)元素开始,按列数计算4个元素将导致[0, 0, 0, 30.57]。 有两种解决方案: 使数组/矩阵布局 行主要:Array<double, 2, Dynamic, RowMajor> arr(2, 6); arr << 1, 2, 3, 4 5, 6, 7, 8; vector<double> row1_vec(arr.row(0).data(), arr.row(0).data() + arr.cols()); // row1_vec: 1, 2, 3, 4 或使用Eigen的Map class: Array2Xd arr(2, 4); arr << 1, 2, 3, 4, 5, 6, 7, 8; vector<double> row1_vec(arr.cols()); Map<RowVectorXd>(&row1_vec[0], 1, arr.cols()) = arr.row(0); // row1_vec: 1, 2, 3, 4

问题描述 投票:0回答:1
我有一个特征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

这里有什么问题,如何从2D数组的一行中创建矢量

无循环

我有一个Eigen Array2Xd,我想将其每一行放入std :: vector

。 spline_knots是大小为(2,4)的Array2Xd,具有以下值:Array2Xd spline_knots(2,4); ...

c++ eigen
1个回答
0
投票
想通了。问题与storage order有关,这是本征如何在内存中布置二维数组的方式。有两种可能的布局:RowMajorColumnMajor。默认布局为ColumnMajor,它按列存储2D数组元素。

知道这一点,我得到的奇怪结果是有道理的。 .row(0).data()将指针返回到第一行的第一元素。 .row(0).size()为4,.row(0).data() + 4沿列取前四个元素:[-1, 0, 0, 0]。第二个列的相同参数从(1,0)元素开始,按列数计算4个元素将导致[0, 0, 0, 30.57]

有两种解决方案:

© www.soinside.com 2019 - 2024. All rights reserved.