【发布时间】:2020-06-20 17:11:31
【问题描述】:
我有一个std::array<double, 2> 元素的向量。我需要将其转换为 Eigen::Vector3d 以使用库,并且我想知道是否有任何方法可以使用 Eigen::Map 与我的向量交互。如果我的向量是 std::array
std::array<double, 3> dx;
Eigen::Map<const Eigen::VectorXd> dx_eig(&dx_[0][0], 3 * dx.size());
但我的向量是由 std::array<double, 2> 组成的,据我所知,我不能直接使用 Eigen::Map。
我想要这样的东西:
std::vector<std::array<double, 2>> x;
Eigen::Map<Eigen::Vector3d> x_eig(x, ???)
x_eig 的行为类似于以下示例
std::vector<std::array<double, 2>> x;
Eigen::Vector3d x_eig(3*x.size());
for (int i = 0; i < x.size(); ++i)
{
x_eig[3*i + 0] = x[i][0];
x_eig[3*i + 1] = x[i][1];
x_eig[3*i + 2] = 0;
}
最后一个snipper需要复制内存和复制。如果可以使用某种映射,则可以减少内存消耗并提高性能。
据我所知,Eigen::Map 允许使用 Stride 类来提供一些步幅,但它们基本上以字节为单位表示一行中的下一个元素,而以字节为单位表示一列中的下一个元素。没有办法指定更复杂的东西,比如读取 2 个连续的双精度然后是 0。
【问题讨论】:
-
您能否提供一个minimal reproducible example,即您将如何手动执行您需要执行的操作。我不知道你想如何从
std::vector<std::array<double,2>>(2*n元素)映射到 3 个元素。此外,在您提供的 sn-p 中,没有dx_,只有dx。 -
Vector3d正好包含 3 个元素。你想要Matrix3Xdperhaps 吗?之后你会做什么操作?