c++ - 具有 2 个分量数组的特征映射到 3 个向量
问题描述
我有一个std::array<double, 2>
元素向量。我需要将其转换Eigen::Vector3d
为使用库,并且我想知道是否有任何方法可以使用 Eigen::Map 与我的向量交互。如果我的向量是 std::array<double, 3>` 我可以做类似的事情
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。
解决方案
可能您可以如下所述转换为 3d 并将向量传递给Eigen::Map
.
//YOUR ARRAY.
std::array<double,2> d2 = {1,2};
//CREATE A VECTOR.
std::vector<double> d3(std::begin(d2), std::end(d2);
//ADD THIRD ELEMENT.
d3.push_back(0);
现在把它传给Eigen::Map
推荐阅读
- python-3.x - 将缺失的日期时间插入 Pandas 数据框 Python
- android - Shrink Android 使 Crash
- sql - 如何在一行中选择两个值?
- ios - 在 AirWatch 上分发 iOS 应用程序 - 相同或别名 sToken 已存在于对等组织组中
- android-studio - 错误:Linux 上 Android Studio 中的“SDK 模拟器目录丢失”
- c# - 如何在 Azure App Service 上运行的 ASP.NET Framework App 中禁用服务器 GC
- php - Laravel Eloquent:查询表,在特定日期获取 X 行(并允许分页)
- python - 尝试从环境变量加载 Scrapy 设置时出现 ModuleNotFoundError
- oracle - 比较 Oracle PL SQL 中 2 个游标的输出
- c# - 多线程 | 威胁已经被清除了