首页 > 解决方案 > 在 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的最后一行?是否有意义?

标签: c++c++11eigen

解决方案


也许是一个简单的“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 函数要快。


推荐阅读