我有一个功能,在10个周期内找到各个传感器值和平均传感器值之间的差异。使用此功能将进行100次测试。因此每次循环> 10时我都强制它为零,这样在第11次重复时它将从零重新开始计数。这是代码:
cycle=cycle +1;
if cycle>10
cycle=0;
end
for i=1: TotalnoOfGrids
for j=1: noOfNodes
if abs(char(Allquants{i}(j))-char(mostCommonLetters {i}))>0
if cycle>0
wrong{i}(j)=wrong{i}(j)+1;
else
wrong{i}(j)=0;
end
end
end
end
现在我需要知道传感器是否在10个周期内连续5次成功。我怎样才能做到这一点?
我想到了一个循环,但我读到它花了太多时间。
在网上搜索我找到this SO question。
问题是上述功能将重复100个周期。我希望每10个周期看看是否有连续的成功,所以它是动态完成的,我没有保存传感器的成功或失败状态周期。所以我没有包含1或0的向量来使用上面引用中使用的函数或Jonas建议的
答案 0 :(得分:1)
如果一个循环是最简单的事情,试试吧!只是因为你已经读过它“花费太多时间”并不意味着它真的会对你的情况产生影响!确实,在Matlab中,避免循环通常是有意义的;但在你的情况下,100 * 20 * 9(如果我理解你的话)循环迭代似乎并不那么糟糕(取决于你的速度要求)。
修改(更正后的答案)
我现在从您的评论中了解到,您向我们展示的代码被while
或for
循环所包围,该循环正在运行~100次,而Allquants
和{{1可能在该循环内部发生变化。在这种情况下,我之前的回答对您不起作用,因为它计算了不同传感器的成功;这应该会更好。
如果我正确阅读了您的代码,条件mostCommonLetters
会告诉您结果是“错误的”;因此,
abs(char(Allquants{i}(j))-char(mostCommonLetters {i}))>0
会计算你连续多少次成功。请注意,您需要在开始for i=1:TotalnoOfGrids
this_cycle_successes(i,:)=char(Allquants{i})==char(mostCommonLetters{i});
end
consecutive_successes=(consecutive_successes+1).*this_cycle_successes;
循环之前初始化consecutive_successes
,例如
cycle
在10个周期之后,您可以检查哪些传感器有5次成功:
consecutive_successes = zeros(9,20);
请注意,这是一个矩阵运算,所以现在您将获得9 * 20个值,正如您在评论中所要求的那样。此解决方案不需要循环 has5successes = consecutive_successes>=5;
。