2017-02-15 8 views
-1

私の目標:5つのシナリオのどれが各行に流行しているかによって、ifステートメントの後に計算をしてください。最終結果は、各行の計算結果を含む1つの列にする必要があります。私がこれまで試したどのような複数の定義済み基準を満たすセルペアの計算?

CalcOutcome = zeros(554,1); 
    for k=height(MomPF) 
     if MomPF.L_sum4t<0 & MomPF.U_sum4t>0   
      % make calc for every row but end result should only be 1 column 
      % with the calc outcomes 
      CalcOutcome=(-1)*MomPF.L_sum4t{k}*0.5 + MomPF.U_sum4t{k}*0.5; 
     elseif MomPF.L_sum4t<0 & MomPF.U_sum4t<0 
      CalcOutcome=(-1)*MomPF.L_sum4t{k}*1; 
     elseif MomPF.L_sum4t>0 & MomPF.U_sum4t>0 
      CalcOutcome=MomPF.U_sum4t{k}*1; 
     elseif MomPF.L_sum4t>0 & MomPF.U_sum4t<0 
      CalcOutcome=MomPF.L_sum4t{k}*0.5 + (-1)*MomPF.U_sum4t{k}*0.5; 
     elseif MomPF.L_sum4t==0 & MomPF.U_sum4t==0 
      CalcOutcome=0   
     end 
    end 

表:私はテストするためにあなたのデータを持っていけないが、私はあなたがインデックスに忘れてしまったと言うだろう enter image description here

+0

あなたの質問は何ですか? – excaza

+0

@excaza、上記(ゴールセクション) – John

+3

質問は通常、疑問符で終わります。 (「この目標をどのように達成するのですか?」を追加しないでください。 – dasdingonesin

答えて

1

他の人が触れたように、インデックス作成が問題であると思われます。つまり、ループする必要はありません。テーブルインデックスを使用してこのすべてを一度に実行できるはずです。例えば、何かのように:その後、

idx = (MomPF.L_sum4t < 0) & (MomPF.U_sum4t > 0); CalcOutcome(idx) = -0.5*MomPF.L_sum4t(idx) + 0.5*MomPF.U_sum4t(idx);

リンスやその他の条件のために繰り返します。

+0

ありがとう!他のケースでも繰り返した後、私がやりたいことを正確にやっています。 – John

1

CalcOutcome = zeros(554,1); 
    for k=height(MomPF) 
     if MomPF.L_sum4t(k)<0 & MomPF.U_sum4t(k)>0   
      % make calc for every row but end result should only be 1 column 
      % with the calc outcomes 
      CalcOutcome(k)=(-1)*MomPF.L_sum4t(k)*0.5 + MomPF.U_sum4t(k)*0.5; 

     elseif MomPF.L_sum4t(k)<0 & MomPF.U_sum4t(k)<0 
      CalcOutcome(k)=(-1)*MomPF.L_sum4t(k)*1; 

     elseif MomPF.L_sum4t(k)>0 & MomPF.U_sum4t(k)>0 
      CalcOutcome(k)=MomPF.U_sum4t(k)*1; 

     elseif MomPF.L_sum4t>(k)0 & MomPF.U_sum4t(k)<0 
      CalcOutcome(k)=MomPF.L_sum4t(k)*0.5 + (-1)*MomPF.U_sum4t(k)*0.5; 

     elseif MomPF.L_sum4t(k)==0 & MomPF.U_sum4t(k)==0 
      CalcOutcome(k)=0   
     end 
    end 

kでループしています。使用してください。

+0

を持っていませんが、次のエラーが発生したので、if文に '{k}'を落としました '配列オブジェクト。 matlab.internal.table.numArgumentsFromSubscriptRecurser(行7)のエラー n = numArgumentsFromSubscript(a、s、ctxt);表中 エラー/ numArgumentsFromSubscript(ライン61) SZ = matlab.internal.table.numArgumentsFromSubscriptRecurser(X、S(2:エンド)、コンテキスト); ' – John

+1

指定した画面キャプチャに基づいて、' MomPF.L_sum4t'でありますセルではないので、内容を中括弧でインデックスすることはできません。 'MomPF.L_sum4t(k)'という規則的な中カッコが必要です。 – CKT

+1

@ジョン.........それはあなたが尋ねたこととは完全に異なるものです。それは '{k}' - > '(k)'のためです。現在の編集を試してください。後で参照するには、[ask]を読む時間を取ってください。非常に重要なことですが、[mcve] –

関連する問題