Находите 5 последовательных успехов, используя Matlab? - PullRequest
2 голосов
/ 24 марта 2012

У меня есть функция, которая в течение 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

Теперь мне нужно знать, выполнил ли датчик 5 последовательных успехов в течение 10 циклов.Как я могу это сделать?

Я подумал о цикле, но я прочитал, что это занимает слишком много времени.

Выполняя поиск в сети, я нашел этот ТАК вопрос .

Проблема в том, что вышеуказанная функция будет повторяться в течение 100 циклов. Я хочу, чтобы каждые 10 циклов проверялись, есть ли последовательные успехи, поэтому они выполняются динамически, и я не сохраняю статус успеха или отказа датчика для циклов.,Так что у меня нет вектора, содержащего 1 или 0, чтобы использовать функцию, использованную в приведенной выше ссылке или, как предложил Джонас

1 Ответ

1 голос
/ 25 марта 2012

Если цикл - самая простая вещь, попробуйте! Если вы прочитали «слишком много времени», это не значит, что это действительно имеет значение для вашего случая!Это правда, что в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...