2011-02-13 184 views
14

说我有一个函数calculateStuff(x),它将一个标量作为参数并返回一个标量。MATLAB:如何应用函数分组

说我有一个向量X,我想在X每一个部件上应用calculateStuff,并得到结果的矢量作为回报,并将其存储在一个新的向量Y.

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

+0

是不是所谓的`地图`? – delnan 2011-02-13 19:40:30

回答

16

你有三个选择:

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

最Matlab操作会让你输入一个矩阵并返回一个矩阵。您应该能够重新编写calculateStuff()来获取矩阵并返回矩阵。这通常比用于循环的快得多。 Matlab中的循环在时间上非常昂贵。

你需要看的东西的种类是正常操作的“点”版本。例如,而不是

y = z * x; 

y = z .* x; 

首先会做一个矩阵乘法,这可能不是你想要的矢量化代码的时候。第二个是逐元素地乘以zx

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