我在维度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
并使用其他参数a
和b
得到维D
的向量fx1
}。
我想将函数g
应用于C
的每个子单元,并将获得的fx1
向量组合在矩阵fxm
中,而不使用循环。我看过命令cellfun
,但我不知道如何使用自己编写的函数。有什么建议吗?
答案 0 :(得分:4)
简单。首先对函数进行处理,其中唯一的输入是单元格数组:
h = @(x) D(x, a, b);
这里,x
将是来自单元阵列的单元格。此外,我将假设您的工作区中已定义a
和b
。之后,就这样做:
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
的人。