c++ - 在 Eigen C++ 中重复向量的最快方法
问题描述
我有两个向量:
Eigen::Array2d A;
Eigen::Array4d B;
基本上,向量 A 包含一些值,例如
0.3
0.7
这个想法是我想得到向量 B 如下
0.3
0.3
0.7
0.7
最快的方法是什么?我想要“最快”的方式,因为我必须多次进行这种操作。我知道我可以混合使用replicate
、transpose()
和Map
函数来做到这一点,但不会那么快。
我应该改用指针吗?假设B的前两行将指向A的第一行,B的最后两行将指向A的最后一行?是否有意义?
解决方案
也许是一个简单的“for”循环?
假设您的向量包含双打:
for(int i = 0; i < A.rows(); i++){
double cur = A(i);
B(2*i) = cur;
B(2*i + 1) = cur;
}
Eigen 倾向于优化向量的循环。临时是为了避免A(i)的多次访问操作。您还需要正确设置行优先/列优先存储顺序,以便尽可能快地访问内存。
我不能保证这是最快的方法,因为我没有对它进行基准测试,但我的直觉告诉我它比一起使用几个内置的 Eigen 函数要快。
推荐阅读
- sql - 查找并转换为大写并用特定值替换特殊字符
- intellij-idea - 在 IntelliJ 上自动生成评论
- json - 如何在本机反应中打印类别值
- windows - 将文本输出导出为 csv 格式,以便使用 Powershell 插入数据库
- docusignapi - 设置 Docusign 签名的宽度和高度
- java - geotools wfs-ng 线程安全和奇怪的行为问题
- wordpress - Wordpress 确保文本在 webfont 加载期间保持可见
- java - 为什么 Google Vignette 广告未在 Android WebView (Java) 中显示?
- wordpress - 更改域后仍然在 Google Analytics 上获取数据
- asp.net-core - 我可以在一个应用程序中使用 openid connect 身份验证和 jwtbearer 身份验证方案吗?