在下面的代码而不是for for循环中,我想实现一个使用特征库函数的单行代码,并帮助代码本身的矢量化,从而通过OpenMP轻松实现并行化。
Eigen::VectorXd get_vector(int n, int j , int start){
Eigen::VectorXd foo(n);
indices = Eigen::VectorXd::LinSpaced(n, start + n - 1, start).array();
for(int i =0;i<indices.size();i++)
foo(i) = (array(indices(i)) - array(j))*(array(indices(i)) - array(j));
return foo;
}
// array is globally declared as Eigen::VectorXd and have length greater than n, it is already been defined.(set of N(>n) random double numbers)
答案 0 :(得分:2)
假设array
是VectorXd
而您在功能之外不需要indices
:
return (array.segment(start, n).array() - array(j)).square();
您应该考虑返回ArrayXd
而不是VectorXd
。
如果array
实际上是ArrayXd
,则可以省略.array()
。