2017-01-31 4 views
0

forループを使用する代わりに、Eigenライブラリ関数を使用し、コード自体のベクトル化を助けるための1行のコードを実装して、OpenMPによる並列化を容易にしたかったのです。 arrayを想定しEigen:forループの使用を避ける

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

'foo(i)= ...'を意味しますか? 'array'とは何ですか? – chtz

+0

@chtzはい、私は今質問を編集しました – user7440094

答えて

2

VectorXdであり、あなたがあなたの関数の外indicesを必要としません:

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

そして、あなたはArrayXd代わりのVectorXdを返す検討すべきです。 arrayが実際にArrayXdの場合は、.array()を省略できます。

+0

私の配列はVectorXdです。私が言いましたように、それは私にエラーを出しました。さらにデバッグすると減算がエラーを出していたようです。なぜそのようなことが起こっているのか? "::: operator-'には一致しません" ::: – user7440094

+0

ヘッダー/ Eigen/src/Core /../ plugins/CommonCwiseUnaryOps.h:45:注:候補は次のとおりです:const Eigen :: CwiseUnaryOp ::スカラー>、const Derived> Eigen :: MatrixBase :: operator-()const [派生= Eigen :: Matrix ] – user7440094

+0

これはエラーです。 – user7440094

関連する問題