如何实现类似cellfun的功能?

How to implement a function similar to cellfun?

我的问题是关于将参数传递给另一个函数;我不知道如何划分 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]})

您需要使用 cellfunvarargin

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

匿名函数 @(varargin)varargin 接受可变数量的输入 (varargin) 作为元胞数组,然后简单地 returns 这个元胞数组。它实际上与功能没有什么不同:

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