MATLAB:如何分批应用函数

时间:2011-02-13 19:40:33

标签: matlab

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

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

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

2 个答案:

答案 0 :(得分:16)

您有三种选择:

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

答案 1 :(得分:9)

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

您需要注意的一些事情是正常操作的“点”版本。例如,而不是

y = z * x;

DO

y = z .* x;

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

请参阅here并搜索“点操作”。