【发布时间】:2018-04-13 09:13:19
【问题描述】:
我想知道是否有比使用 for 循环更简单的方法来解决我的问题。所以情况如下:
一般来说,我想从我的传感器收集数据点(消息类型为Eigen::Vector3d,我无法更改它,因为它是一个巨大的框架)
收集的点应保存在 Eigen MatrixXd 中(以便在优化算法中将它们作为矩阵进一步处理),矩阵的先验维度部分未知,因为这取决于我将进行多少次测量(一维是3,因为有x,y,z坐标)
目前,我创建了一个std::vector<Eigen::Vector3d>,通过push_back 收集积分,收集完积分后,我想通过操作Map 将其转换为MatrixXd。
sensor_input = Eigen::Map<Eigen::MatrixXd>(sensor_input_vector.data(),3,sensor_input_vector.size());
但我有一个错误并注意:没有已知的参数 1 从 Eigen::Matrix<double, 3, 1>* 到 Eigen::Map<Eigen::Matrix<double, -1, -1>, 0, Eigen::Stride<0, 0> >::PointerArgType {aka double*} 的转换
你能告诉我如何使用地图函数来实现吗?
【问题讨论】:
-
使用 for 循环有什么问题?
-
我只是好奇/感兴趣,有没有更简单的方法,我假设 map 比 for 循环更有效?
-
Map是去这里的正确方法。但是你应该发布一个实际的minimal reproducible example。Eigen::Map是模板类型,所以你上面的代码根本无法编译。 -
在其他语言中,map 可能更有效。在 C++ 中,一切都是一样的
-
好的,你的 mcve 只是因为格式不正确而搞砸了。你需要写
sensor_input_vector[0].data()而不是sensor_input_vector.data()