Если цикл - самая простая вещь, попробуйте! Если вы прочитали «слишком много времени», это не значит, что это действительно имеет значение для вашего случая!Это правда, что в Matlab часто имеет смысл избегать циклов;но в вашем случае 100 * 20 * 9 (если я вас правильно понимаю) итераций цикла покажется не такими уж плохими (в зависимости от ваших требований к скорости).
Редактировать (исправленный ответ)
Теперь из ваших комментариев я понимаю, что код, который вы показываете нам, окружен циклом while
или for
, который выполняется ~ 100 раз, и что Allquants
и 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
, например,
consecutive_successes = zeros(9,20);
. После 10 циклов вы можете проверить, какие датчики имели 5 успехов, например:
has5successes = consecutive_successes>=5;
Обратите внимание, что это матричная операция, поэтому теперь вы получите 9 * 20 значений, как вы и просили в своем комментарии.Это решение не требует петли над j
.