オクターブに付属しているヘルプファイルは、このエントリを持っている:
19.1基本的なベクトル化
非常に良い第一近似として、ベクトル化における目標は、ループを回避し、全体のアレイを使用しています 書き込みコードにありますオペレーション。 簡単な例として、これを書くのは単なるより簡単ではありませんはるかに簡単
c = a + b;
に比べ
for i = 1:n
for j = 1:m
c(i,j) = a(i,j) + b(i,j);
endfor
endfor
を検討します。それはまた、内部的にははるかに簡単です 最適化する。オクターブは、他の最適化の中で特別なベクトル ハードウェア命令を使用するか、または パラレルで追加を実行する可能性がある、基礎となる 実装にこの操作を委任します。一般に、コードがベクトル化されている場合、基盤となる の実装では、より高速な実行を実現するために 命令で行うことができる前提に対して、より自由度があります。
"安価な"ボディのループで特に重要です。多くの場合、 の許容値を得るには、最も内側のループをベクトル化するだけで十分です。一般的な経験則では、 ベクトル化されたボディの「順序」は、ループを囲む の「順序」より大きいか等しい必要があります。以下簡単な例として
、代わりの
for i = 1:n-1
a(i) = b(i+1) - b(i);
endfor
書き込み
a = b(2:n) - b(1:n-1);
これは 索引付けのためにアレイを使用する代わりに、インデックス変数をループに関する重要な一般的な概念を示しています。 インデックス式。 ブーリアンインデックスも寛大に使用してください。 の条件をテストする必要がある場合は、この条件をブール型 インデックスとして記述することもできます。代わりに '> 5' ブール指標を生成するという事実を利用
for i = 1:n
if (a(i) > 5)
a(i) -= 20
endif
endfor
書き込み
a(a>5) -= 20;
のインスタンス。
( '。*'や '。^'などの演算子)をループさせないように、可能な限り要素ごとのベクトル演算子を使用してください。 Á算術演算。単純な インライン関数の場合、 'vectorize'関数はこれを自動的に行うことができます。
- 組み込み関数:ベクタライズ(FUN) 「で、「」、「/」の すべての発生、等を置き換えることにより、インライン関数funのベクトル化バージョンを作成します。「」./」、等
This may be useful, for example, when using inline functions with
numerical integration or optimization where a vector-valued
function is expected.
fcn = vectorize (inline ("x^2 - 1"))
=> fcn = f(x) = x.^2 - 1
quadv (fcn, 0, 3)
=> 6
See also:  inline,  formula,
 argnames.
はまた、これらの両方に 回避がループ要素単位の演算子との不要な中間メモリの割り当てに放送を利用します。
放送中。
可能であれば、組み込み関数とライブラリ関数を使用します。組み込み関数と コンパイル関数は非常に高速です。 m-ファイルライブラリ関数を使用しても、 機能が既に最適化されているか、最適化される可能性があります。将来のリリースでは が最適化されます。例えば
、
a = b(2:n) - b(1:n-1);
よりも良いが
a = diff (b);
ほとんどオクターブ機能は 心のベクトルと配列の引数で書かれています。非常に単純な操作でループを作成していると思われる場合は、 はそのような関数が既に存在する可能性があります。以下 関数はベクトル化コードで頻繁に発生する。
ランキング操作
* find
* sub2ind
* ind2sub
* sort
* unique
* lookup
* ifelse/merge
繰り返し
* repmat
* repelems
ベクトル化演算
* sum
* prod
* cumsum
* cumprod
* sumsq
* diff
* dot
* cummax
* cummin
高い次元配列
* reshape
* resize
* permute
* squeeze
* deal
の形状も例といくつかのより多くの指導のためのスタンフォードMLのwikiからこれらのページを見てください。
http://ufldl.stanford.edu/wiki/index.php/Vectorization
http://ufldl.stanford.edu/wiki/index.php/Logistic_Regression_Vectorization_Example
http://ufldl.stanford.edu/wiki/index.php/Neural_Network_Vectorization
あなたはGLMの講義へのリンクを提供することはできますか? – justis
スタンフォード大学のAndrew Ng教授のMLクラスの礼儀:http://cs229.stanford.edu/materials.html - GLMとSoftmax回帰の資料は、講義1の最後にあります – oort