跳轉到內容

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 快一個數量級,迴圈有很大的開銷。

華夏公益教科書