Как применить cellfun (или arrayfun или structfun) с постоянными дополнительными входными аргументами? - PullRequest
9 голосов
/ 19 июля 2010

Я хочу применить функцию к каждому элементу массива ячеек - поэтому у меня есть cellfun для этого. Однако функция принимает два дополнительных аргумента (строку и вектор), которые я хочу сохранить постоянными для всех элементов массива ячеек; то есть я хотел бы сделать что-то вроде:

cellfun(@myfun, cellarray, const1, const2)

значение:

for i = 1:numel(cellarray),
  myfun(cellarray{i}, const1, const2);
end

Есть ли способ сделать это без создания промежуточных массивов ячеек, содержащих numel(cellarray) копий const1 и const2?

Ответы [ 2 ]

16 голосов
/ 19 июля 2010

Вы можете сделать это, используя анонимную функцию , которая вызывает myfun с двумя дополнительными аргументами:

cellfun(@(x) myfun(x,const1,const2), cellarray)
4 голосов
/ 19 июля 2010

Еще один прием - использовать ARRAYFUN для индексов:

arrayfun(@(k) myfun(cellarray{k},const1,const2), 1:numel(cellarray))

если возвращаемые значения myfun не являются скалярами, вы можете установить параметр 'UniformOutput',false.

...