【问题标题】:MATLAB: how to apply function componentwiseMATLAB:如何逐个应用函数
【发布时间】:2011-02-14 10:03:41
【问题描述】:

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

假设我有一个向量 X,我想对 X 中的每个分量应用 calculateStuff,并得到一个结果向量作为回报并将其存储在一个新的向量 Y 中。

显然 Y=calculateStuff(X) 是非法的,除了循环还有其他方法吗?

【问题讨论】:

标签: matlab


【解决方案1】:

您有三个选择:

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

【讨论】:

    【解决方案2】:

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

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

    y = z * x;
    

    y = z .* x;
    

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

    查看here 并搜索“点操作”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多