我有两个向量:
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的最后一行?有道理吗?
答案 0 :(得分:0)
也许是一个简单的“ 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函数要快。
>