特征:避免使用for循环

时间:2017-01-31 07:24:04

标签: optimization openmp eigen

在下面的代码而不是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)

1 个答案:

答案 0 :(得分:2)

假设arrayVectorXd而您在功能之外不需要indices

return (array.segment(start, n).array() - array(j)).square();

您应该考虑返回ArrayXd而不是VectorXd。 如果array实际上是ArrayXd,则可以省略.array()