跳转到内容

Octave 编程教程/向量化

来自维基教科书,开放的书籍,面向开放的世界

用向量运算编写例程比使用内置解释循环效率高出几个数量级,因为 Octave 可以使用高度优化的 FORTRANC 数值线性代数库。即使例程或函数没有用向量化的形式编写,也可以通过使用 arrayfun 或类似结构来利用向量化。

使用 arrayfun 将常规函数向量化

[编辑 | 编辑源代码]

考虑一个匿名 函数

octave:1> f = @(x) sin(x)*x

Octave 输出 

f =
@(x) sin (x)*x

并假设我们想要计算从 1 到 7 的给定整数向量中每个元素的此函数 

octave:2> y=1:7
y =
  1   2   3   4   5   6   7

然后将 y 作为 f 的参数传递会产生错误

octave:3> f(y)
error: operator *: nonconformant arguments (op1 is 1x7, op2 is 1x7)
error: called from:
error:    at line -1, column -1

这是因为 f 没有为向量输入定义。但这并不是问题,因为我们可以这样做

octave:4> arrayfun(f,y)

输出是 

ans =
  0.84147   1.81859   0.42336  -3.02721  -4.79462  -1.67649   4.59891

这比使用循环为许多 y 值计算 f 快一个数量级,循环有很大的开销。

华夏公益教科书