对满足多个预定义标准的单元格对进行计算?
Calculations on cell pairs that meet multiple pre-defined criteria?
我的目标:根据每行中普遍存在的 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
Table:
我没有要测试的数据,但我会说你忘了索引!
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
,使用它。
正如其他人所提到的,索引似乎是问题所在。也就是说,您不需要循环——您应该能够使用 table 索引一次完成所有这些操作。例如,类似于:
idx = (MomPF.L_sum4t < 0) & (MomPF.U_sum4t > 0);
CalcOutcome(idx) = -0.5*MomPF.L_sum4t(idx) + 0.5*MomPF.U_sum4t(idx);
然后冲洗并重复其他条件。
我的目标:根据每行中普遍存在的 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
Table:
我没有要测试的数据,但我会说你忘了索引!
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
,使用它。
正如其他人所提到的,索引似乎是问题所在。也就是说,您不需要循环——您应该能够使用 table 索引一次完成所有这些操作。例如,类似于:
idx = (MomPF.L_sum4t < 0) & (MomPF.U_sum4t > 0);
CalcOutcome(idx) = -0.5*MomPF.L_sum4t(idx) + 0.5*MomPF.U_sum4t(idx);
然后冲洗并重复其他条件。