MATLAB中函数数组的矢量化或单行评估

Rya*_*ith 4 matlab vectorization cell-array

在上一个问题中,用户询问迭代匿名函数的单元格数组.我想知道是否有办法在没有明确使用for循环的情况下评估一组函数.

例如,以下代码创建一个(简单)函数数组,对它们求值以获得固定值并存储结果:

fcnList = {@(x) (x+1), @(x) (x+2)};
a = 2;
for i = 1:numel(fcnList)
    y(i) = fcnList{i}(a);
end
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有循环的情况下做到这一点?

bro*_*oll 5

对于您的示例,您可以使用cellfun函数执行以下操作:

fcnList = {@(x) (x+1), @(x) (x+2)};
a = 2;
cellfun(@(func) func(a),fcnList)
ans =

   3   4
Run Code Online (Sandbox Code Playgroud)

我在哪里创建了一个句柄func,该句柄接受来自fcnList变量的函数作为输入.然后评估每个功能a.

例如,如果需要传递向量而不是标量,b则需要将'UniformOutput'选项设置为false:

b=[3 4]
fcnList = {@(x) (x+1), @(x) (x+2)};
cellfun(@(func) func(b),fcnList,'UniformOutput',false)
ans =
{
  [1,1] =
     4   5
  [1,2] =
     5   6
}
Run Code Online (Sandbox Code Playgroud)