MATLAB:如何分批应用函数

Rob*_*nis 14 matlab

假设我有一个函数calculateStuff(x),它接受一个标量作为参数并返回一个标量.

假设我有一个向量X,我想在X中的每个组件上应用calculateStuff,并获得结果的向量并将其存储在新的向量Y中.

显然Y = calculateStuff(X)是非法的,除了循环之外,还有什么方法可以做到这一点?

Jon*_*nas 16

你有三个选择:

  1. 修改,calculateStuff以便它可以采取数组和返回数组
  2. 写一个循环
  3. 使用arrayfun隐藏循环:Y = arrayfun(@calculateStuff,X)


Pet*_* K. 9

大多数Matlab操作都允许您输入矩阵并返回矩阵.您应该能够重写calculateStuff()以获取矩阵并返回矩阵.这通常比使用for循环快得多.Matlab中的循环在时间上非常昂贵.

您需要注意的是正常操作的"点"版本.例如,而不是

y = z * x;
Run Code Online (Sandbox Code Playgroud)

y = z .* x;
Run Code Online (Sandbox Code Playgroud)

第一个将进行矩阵乘法,这可能不是你想要的矢量化代码.第二个是逐个元素乘以zx.

这里和搜索"的点行动".