繁体   English   中英

在Eigen C ++中重复向量的最快方法

[英]Fastest way to repeat a vector in Eigen c++

我有两个向量:

Eigen::Array2d A;
Eigen::Array4d B;

基本上,向量A包含一些值,例如

0.3
0.7

这个想法是我想得到向量B如下

0.3
0.3
0.7
0.7

最快的方法是什么? 我需要“最快”的方式,因为我不得不多次进行这种操作。 我知道我可以混合使用replicatetranspose()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;
}

本征倾向于优化向量的循环。 临时是为了避免A(i)的多次访问操作。 您还将希望正确设置行主/列主存储顺序,以便内存访问尽可能快。

我无法保证这是最快的方法,因为我尚未对其进行基准测试,但是我的直觉告诉我,这将比同时使用多个内置的Eigen函数要快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM