如何实现类似cellfun的功能?

时间:2017-02-16 22:29:58

标签: matlab cell-array function-parameter

我的问题是将参数传递给另一个函数;我不知道如何划分varargin并将值作为参数传递。

function A = mycellfun(func, varargin)
  A = cell(size(varargin{1}));
  for ii = 1:numel(A)
      A{i} = func(varargin{ ??? })
  end
end

...

S = mycellfun(@plus, {1 [2 3]}, {4 [5 6]})

1 个答案:

答案 0 :(得分:1)

您需要使用cellfunvarargin

中每个元素中的相应条目进行分组
inputs = cellfun(@(varargin)varargin, varargin{:}, 'UniformOutput', false);

匿名函数@(varargin)varargin接受可变数量的输入(varargin)作为单元格数组,然后只返回此单元格数组。它实际上与功能没有什么不同:

function v = func(varargin)
    v = varargin;
end

例如:

varargin = {{1, 2, 3}, {4, 5, 6}};
inputs = cellfun(@(varargin)varargin, varargin{:}, 'UniformOutput', false);
%   {{1, 4}, {2, 5}, {3, 6}}

然后你可以遍历inputs,每个单元格元素将包含给定迭代的所有输入。然后,您可以使用{:}索引创建逗号分隔列表,并将其作为输入传递给func

A = cell(size(inputs));

for k = 1:numel(inputs)
    A{k} = func(inputs{k}{:});
end