Ho bisogno di normalizzare un vettore di N interi in modo che:Come dovrei normalizzare un vettore in Matlab dove la somma è 1?
- Ogni valore è proporzionale al valore originale (il valore sarà compreso tra 0 e 1)
- La somma di tutti i valori è = 1
Per esempio:
Se ho un vettore
V = [2,2,1,0]
il vettore normalizzato dovrebbe dovrebbe essere:
V_norm = [0.4,0.4,0.2,0] % 0.4+0.4+0.2 = 1
ho provato con tante soluzioni trovate in questa comunità e sul web e, infine, l'ho fatto con questo codice:
part = norm(V);
if part > 0
V_norm = V/part;
else % part = 0 --> avoid "divide by 0"
V_norm = part;
end
Il problema questo funziona se :
- tutti gli elementi della matrice sono "0" -> array risultante non cambia
- solo elemento della arra y è> 0 e tutti gli altri elementi sono = 0 -> array risultante: l'elemento> 0 è 1 e l'altra 0
ma se ho un altro caso, anche se il risultato è proporzionale, la somma è non 0. Per esempio:
V = [1,0,1]
V_norm = [0.74,0,0.74]
V = [1,1,1]
V_norm = [0.54,0.54,0.54]
(non sono sicuro se il numero è corretto, perché non posso usare Matlab in questo momento, ma sono sicuro che la somma è> 1)
Ahy suggerimento?
Grazie in anticipo
Come un sidenote, 'sum (v)' non può qualificarsi matematicamente come [norma] (http://en.wikipedia.org/wiki/Norm_ (matematica)) perché può produrre valori negativi. –
Non soddisfa il requisito che tutti i valori siano compresi tra 0 e 1 (considerando gli elementi negativi). – Tobold
Sono d'accordo. Non avrei dovuto usare la "normalizzazione" invece di "norma", come ha fatto l'OP. Modificherò la mia risposta di conseguenza. – Deve