在Matlab中将函数应用于单元格的每个子单元格?

时间:2015-06-26 20:19:59

标签: matlab

我在维度C的Matlab中有一个单元格mx1,例如m=3

C={{1 2 3} {4 5 6} {7 8 9 10}}

然后我有一个函数g写在一个单独的m文件

function D=g(C{i},a,b)
...
end

采用C{i}的任何子单元C并使用其他参数ab得到维D的向量fx1 }。

我想将函数g应用于C的每个子单元,并将获得的fx1向量组合在矩阵fxm中,而不使用循环。我看过命令cellfun,但我不知道如何使用自己编写的函数。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

简单。首先对函数进行处理,其中唯一的输入是单元格数组:

h = @(x) D(x, a, b);

这里,x将是来自单元阵列的单元格。此外,我将假设您的工作区中已定义ab。之后,就这样做:

out = cellfun(h, C, 'uni', 0);

第一个参数是函数的句柄,我们已经定义了它。下一个参数是您要操作的单元格数组,并将函数h应用于数组中的每个单元格。您需要指定uni=0标记,因为输出为非均匀。因为您的函数每个单元格输出一个向量,所以这是必需的。如果您的函数输出单个值,则不需要此uni=0声明。

或者,您可以循环执行此操作...这是cellfun最终执行的操作:

out = cell(numel(C), 1);
for idx = 1 : numel(C)
    out{idx} = D(C{idx}, a, b);
end

对我而言,第二种选择更适合那些习惯使用cellfun的人。