I doivent normaliser un vecteur d'entiers N de telle sorte que:Comment est-ce que je devrais normaliser un vecteur dans Matlab où la somme est 1?
- Chaque valeur est proportionnelle à sa valeur d'origine (la valeur est comprise entre 0 et 1)
- La somme de toutes les valeurs a = 1
Par exemple:
Si j'ai un vecteur
V = [2,2,1,0]
le vecteur normalisé doit doit être:
V_norm = [0.4,0.4,0.2,0] % 0.4+0.4+0.2 = 1
J'ai essayé avec de nombreuses solutions trouvées dans cette communauté et sur le web et, enfin, je l'ai fait avec ce code:
part = norm(V);
if part > 0
V_norm = V/part;
else % part = 0 --> avoid "divide by 0"
V_norm = part;
end
Le problème que cela fonctionne si :
- tous les éléments du tableau sont "0" -> array résultant ne change pas
- un seul élément de l'ARRA y est> 0 et tous les autres éléments sont = 0 -> réseau résultant: l'élément> 0 est égal à 1 et l'autre 0
mais si j'ai un autre cas, bien que le résultat est proportionnel à la somme est pas 0. Par exemple:
V = [1,0,1]
V_norm = [0.74,0,0.74]
V = [1,1,1]
V_norm = [0.54,0.54,0.54]
(Je ne sais pas si le nombre est correct parce que je ne peux pas utiliser Matlab en ce moment mais je suis sûr que la somme est> 1)
Ahy allusion?
Nous vous remercions à l'avance
En tant que sidenote, 'sum (v)' ne peut pas être mathématiquement qualifié de [norme] (http://en.wikipedia.org/wiki/Norm_ (mathématique)) car il peut donner des valeurs négatives. –
Ne satisfait pas à toutes les valeurs comprises entre 0 et 1 (en considérant les éléments négatifs). – Tobold
Je suis d'accord. Je n'aurais pas dû utiliser la "normalisation" au lieu de la "norme", comme l'a fait le PO. Je vais modifier ma réponse en conséquence. – Deve