I file di aiuto che vengono con Octave hanno questa entrata
19,1 Vettorizzazione base
Per una buona prima approssimazione, l'obiettivo in vettorializzazione è quello di scrivere il codice che evita i loop e usa tutta-array operazioni.Come un esempio banale , considerano
for i = 1:n
for j = 1:m
c(i,j) = a(i,j) + b(i,j);
endfor
endfor
rispetto al molto più semplice
c = a + b;
Questo non è solo più facile da scrivere; è anche internamente molto più facile da ottimizzare . Octave delega questa operazione a un'implementazione di base che, tra le altre ottimizzazioni, può utilizzare le istruzioni hardware del vettore speciale o, in teoria, potrebbe persino eseguire le aggiunte nel parallelo . In generale, se il codice è vettorializzato, l'implementazione sottostante ha più libertà riguardo alle ipotesi che può fare nell'ordine per ottenere un'esecuzione più rapida.
Questo è particolarmente importante per i loop con corpi "economici". Spesso è sufficiente per vettorizzare solo il ciclo più interno per ottenere prestazioni accettabili . Una regola generale è che "l'ordine" del corpo vettorizzato deve essere maggiore o uguale a "ordine" del ciclo di chiusura .
Come esempio meno banale, invece di
for i = 1:n-1
a(i) = b(i+1) - b(i);
endfor
scrittura
a = b(2:n) - b(1:n-1);
Questo mostra un importante concetto generale sull'utilizzo di matrici per l'indicizzazione invece di ciclare su una variabile indice.  Espressioni dell'indice. Utilizzare anche l'indicizzazione booleana generosamente. Se è necessario testare una condizione , questa condizione può anche essere scritta come indice booleano . Ad esempio, invece di
for i = 1:n
if (a(i) > 5)
a(i) -= 20
endif
endfor
scrittura
a(a>5) -= 20;
che sfrutta il fatto che 'a> 5' produce un indice booleana.
Utilizzare gli operatori vettore elementare quando possibile per evitare il looping (operatori come ". *" E ". ^").  Operazioni aritmetiche. Per le semplici funzioni inline , la funzione 'vectorize' può farlo automaticamente.
- Funzione incorporata: vectorize (FUN) Crea una vettorizzati versione della funzione FUN inline sostituendo tutte le occorrenze di '', '/', ecc, con'. '' ./', ecc
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.
exploit anche trasmissioni in questi operatori elementwise sia per evitare il loop e inutili allocazioni di memoria intermedie.
 Trasmissione.
Utilizzare le funzioni incorporate e di libreria, se possibile. Le funzioni compilate e compilate sono molto veloci. Anche con una funzione di libreria di file m, le probabilità di sono buone che sono già ottimizzate o che saranno ottimizzate di più in una versione futura.
Per esempio, anche meglio di
a = b(2:n) - b(1:n-1);
è
a = diff (b);
maggior parte delle funzioni di ottava sono scritti con vettoriali e matrice argomenti in mente. Se ti ritrovi a scrivere un loop con un'operazione molto semplice, le probabilità di sono che tale funzione esiste già. Le funzioni seguenti verificano frequentemente in codice vettorizzato:
manipolazione Indice
* find
* sub2ind
* ind2sub
* sort
* unique
* lookup
* ifelse/merge
Ripetizione
* repmat
* repelems
aritmetica Vettorizzati
* sum
* prod
* cumsum
* cumprod
* sumsq
* diff
* dot
* cummax
* cummin
forma di maggiori dimensioni array
* reshape
* resize
* permute
* squeeze
* deal
Anche guardare queste pagine da un wiki Stanford ML per un po 'di guida con esempi.
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
può fornire un link alla conferenza su GLM? – justis
Per gentile concessione della classe ML del Professor Andrew Ng a Stanford: http://cs229.stanford.edu/materials.html - il materiale di regressione GLM e Softmax si trova alla fine di Lezione 1 – oort