Octave 编程教程/向量化
外观
用向量运算编写例程比使用内置解释循环效率高出几个数量级,因为 Octave 可以使用高度优化的 FORTRAN 和 C 数值线性代数库。即使例程或函数没有用向量化的形式编写,也可以通过使用 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 快一个数量级,循环有很大的开销。