2017-06-27 4 views
2

を働いていないGFORループを実行しようとするが、これは一度だけ実行...ArrayFile GFORは、私は

誰かが私を助けることができますか? processation、算出したEMとEDの最初の位置の最後に

gfor(seq j, gammaStep-1){ 
    vector<predicao> vals; 
    countLoop = (int) sqc(j).scalar<float>(); 
    double localGamma = (countLoop+1)*incGamma; 
    vector<rbf> rbfs = mountRbf(X1, Y1, localGamma); 
    for (int i = 0; i < XT.size(); i++){ 
     double p = prediction(XT[i], rbfs, localGamma); 
     predicao p1; 
     p1.val = p; 
     p1.err = abs(XT[i] - p); 
     vals.push_back(p1); 
    } 
    double sumErr = 0; 
    for (int i = 0; i < vals.size(); i++){ 
     sumErr += vals[i].err; 
    } 
    double media = sumErr/vals.size(); 
    double vary = 0; 
    for (int i = 0; i < vals.size(); i++){ 
     vary += pow(vals[i].err - media, 2); 
    } 
    double dev = sqrt(vary); 
    eM[countLoop] = media; 
    eD[countLoop] = dev; 
} 

...

+0

更新、私はgforを入力する前にすべてのgammasを計算しました...しかし、まだすべてのinstanciesのために同じことを計算します。 最小限の例では、うまくいく...(2-powを計算する) –

答えて

0

ポイントのカップルはここに役立つかもしれない:

  1. を変換しないでください。 jスカラーへのインデックス。

  2. sumErr + =ヴァルス[I] .ERRようなインプレースアキュムレータを削除します。

  3. のみを使用して、AF ::配列 GFORループ内で、できるだけ多くの種類の

しかし、主な懸念は完全にする必要があります

prediction(XT[i], rbfs, localGamma) 

の呼び出しですベクトル化されているので、並列ループで実行できます。
gforは、任意の関数を自動的に並列化できません。

一方、他のロジックを並列化したい場合、RMSエラーの計算、ループから予測への呼び出しを引き出し、結果をaf ::配列にロードし、コードを並列化することができます各エラーを計算し、最後に並列ループのの外側にあるの合計をとる。

関連する問題