В previous question пользователь спросил об итерации по массиву ячеек анонимных функций. Мне интересно, есть ли способ оценить набор функций без явного использования цикла for
.Векторизованная или однострочная оценка функционального массива в MATLAB
В качестве примера, следующий код создает массив (простые) функций, оценивает их для фиксированного значения и сохраняет результаты:
fcnList = {@(x) (x+1), @(x) (x+2)};
a = 2;
for i = 1:numel(fcnList)
y(i) = fcnList{i}(a);
end
Есть ли способ сделать это без зацикливания?
Я думаю, вы можете использовать ['cellfun'] (http://www.mathworks.com/help/matlab/ref/cellfun.html) с помощью [' feval'] (http://www.mathworks.com/help/matlab/ ref/feval.html), но я не совсем уверен, почему в этом случае необходимо избегать цикла 'for'. 'cellfun' также может быть медленнее, но у меня нет MATLAB для тестирования на данный момент. – excaza
Вы правы, что, вероятно, есть мало случаев, когда это значительно ускорит выполнение. Тем не менее, он появился в проекте, и я подумал, что это не помешает спросить. –
Чтобы избежать цикла 'for' или' cellfun' (который более или менее совпадает с циклом), вы можете определить функцию _single_ с выходом _vector_ или _cell array_: 'fcn = @ (x) [x + 1, x + 2]; 'или' fcn = @ (x) {x + 1, x + 2}; '. Затем 'fcn (a)' дает вам вектор или массив ячеек, совпадающих с результатами. –