У меня есть сценарий, который требует нескольких параметров для запуска. Мне интересно исследовать результаты по мере изменения параметров, поэтому я определяю несколько массивов scan
вверху, обертывая весь код несколькими for loops
и устанавливая значения параметров для текущих значений сканирования.Есть ли более элегантный способ написать эти циклы?
Это ошибка склонная и неэлегантная. Процесс изменения кода: 1) сброс scan
переменных вверху, 2) комментарий, например b = scan2(j2)
и 3) раскоммент b=b0
.
Что является лучшим методом, позволяющим устанавливать переменные в массивы и затем запускать код для всех таких комбинаций? Пример моего кода Теперь:
close all
clear all
%scan1 = linspace(1,4,10);
scan1 = 0;
scan2 = linspace(0,1,10);
scan3 = linspace(-1,0,10);
for j3 = 1:length(scan3)
for j2 = 1:length(scan2)
for j1 = 1:length(scan1)
a = a0;
%b = scan2(j2);
b = b0;
%c = c0;
c = scan3(j3);
d = scan2(j2);
%(CODE BLOCK THAT DEPENDS ON variables a,b,c,d...)
end
end
end
На данный момент нет общего правила. Векторизация кода в значительной степени зависит от того, что именно происходит в циклах, например. матричное умножение, суммирование или что-то еще. – freude
Хм. Я на самом деле не пытаюсь это процитировать, я просто хочу улучшить организацию. Я мог бы, например, создать массив 1xN для каждого параметра в верхней части, избегая комментирования бизнеса, но я немного обеспокоен использованием памяти ... и кажется излишним иметь тройной цикл, когда часто я только петлю 1 сканирование. – ConfusinglyCuriousTheThird
Я пытаюсь понять ваш код, есть ли конкретная причина перечислять переменные 'scan', отличные от ваших параметров? Не могли бы вы переименовать их в 'scana'' scanb' и т. Д. И итераторы на' ja' 'jb' и т. Д.? – Daniel