MATLAB:如何逐个对函数进行组件应用

14

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

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

很明显,Y=calculateStuff(X) 是不合法的,除了循环外,我是否有其他方法可以实现这一点?


这不就是叫做 map 吗? - user395760
1
@Robert:请不要发布同一问题的多个帖子。 - Robert Harvey
可能是Matlab中的Map函数?的重复问题。 - gnovice
2个回答

16

你有三个选项:

  1. 修改 calculateStuff 函数,使其能够处理数组并返回数组。
  2. 编写循环。
  3. 使用arrayfun函数隐藏循环: Y = arrayfun(@calculateStuff,X)

9

大多数Matlab操作都可以让您输入矩阵并返回矩阵。 您应该能够重新编写calculateStuff()以接受矩阵并返回矩阵。 通常,这比使用 for 循环要快得多。 在Matlab中,循环的时间成本非常高。

您需要查看的内容是正常操作的“点”版本。 例如,不是

y = z * x;


y = z .* x;

第一个将执行矩阵乘法,这可能不是您向量化代码时想要的。第二个对zx进行逐元素相乘。

请参见此处并搜索“点操作”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接