Eigen:Avoid 使用 for 循环

Eigen:Avoid using for loop

在下面的代码中,我想实现一行代码,而不是使用 for 循环,该代码将使用 Eigen 库函数并帮助代码本身的矢量化,从而使通过 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)

假设 array 是一个 VectorXd 并且您不需要 indices 在您的函数之外:

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

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