matlab - MATLAB 中函数数组的矢量化或单行求值

标签 matlab vectorization cell-array

previous question 中,一位用户问及迭代匿名函数的元胞数组。我想知道是否有一种方法可以在不显式使用 for 循环的情况下评估一组函数。

例如,以下代码创建了一个(简单)函数数组,计算它们的固定值并存储结果:

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

有没有不用循环的方法呢?

最佳答案

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

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

   3   4

我在其中创建了一个名为 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
}

关于matlab - MATLAB 中函数数组的矢量化或单行求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30415383/

相关文章:

Matlab停止函数的执行

string - 将 regexprep 与元胞数组结合使用以对冒号进行格式化

arrays - 在Matlab中从元胞数组中删除连续和不连续的列

matlab - matlab中两个元胞数组相减最快的方法是什么

Matlab:44100 Hz 数据的时间序列图

matlab - 如何在 MATLAB 中删除轴

r - rowSums(X %*% C * X) 的语义是什么

python - NumPy 数组的阈值像素索引

matlab - 将零对角线添加到 MATLAB 中的矩阵

c++ - 将 mwArray 转换为 std::vector<double>