Я использую MATLAB R2014a и пишу программу, которая будет обрабатывать миллионы точек данных. Проблема в том, что время выполнения увеличивается до абсурдной суммы, когда она проходит отметку в сотни тысяч, и даже тогда она больше, чем должна быть. Это связано с тем, что у меня есть два оператора if, которые содержат или схему. Я проверил его с помощью простого кода и обнаружил, что схема или схема занимают невероятно долгое время по сравнению с разрывом или схемой на две разные статусы.Слишком длительное время, используя оператор if или схему в MATLAB
Следующий код является довольно быстро и использует два, если утверждения вместо или цепи:
dataBlock = 500000;
num_loops = 1;
while num_loops <= 2000000
if num_loops ==200000
disp('200000');
end
if num_loops == dataBlock
disp('num_loops = dataBlock');
dataBlock = dataBlock + 500000;
end
num_loops = num_loops+1;
end
Следующий код является таким же, как показано выше, но использует или цепь, а не два, если заявления. Она работает невероятно медленно, даже если я обеспечил более частый случай записывается первым:
dataBlock = 500000;
num_loops = 1;
while num_loops <= 2000000
if num_loops == dataBlock|| num_loops == 200000
disp('entered or cuircit');
if num_loops == dataBlock
disp('num_loops = dataBlock');
dataBlock = dataBlock + 500000;
end
num_loops = num_loops+1;
end
end
Когда я понял, что разделение схемы на два, если заявления были быстрее, я пытался, что в моем исходном коде, но он не сделал похоже, имеют какое-то влияние. Возможно, потому, что код, который я использую, более сложный и длительный, чем те, которые я использовал для тестирования и предоставили здесь.
Кто-нибудь знает, почему длительность времени, требуемого для запуска программы с помощью схемы или так длинна? Любые идеи для возможной альтернативы?
FYI «цепь», на которую вы ссылаетесь, должна называться логической операцией ИЛИ. Возможно, вы смутили его с помощью [короткого замыкания] (http://www.mathworks.com/help/matlab/ref/logicaloperatorsshortcircuit.html#bt_0nai-1). – Setsu
Кроме того, две версии не делают то же самое; вторая версия называет 'disp' больше, чем первая. Удаление вызовов 'disp' дало мне приблизительные значения времени. Кроме того, не называйте 'disp', когда вы синхронизируете материал; запись в командное окно является нетривиальной и существенно повлияет на производительность. – Setsu