在特征c++中重复向量的最快方法

Fastest way to repeat a vector in Eigen c++

本文关键字:方法 向量 特征 c++      更新时间:2023-10-16

我有两个向量:

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;
}

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

我不能保证这是最快的方法,因为我还没有对其进行基准测试,但我的直觉告诉我,这将比同时使用几个内置的特征函数更快。