Comment dois-je normaliser un vecteur dans Matlab où la somme est 1?

J'ai besoin de normaliser un vecteur de N entiers, de sorte que:

  • Chaque valeur est proportionnelle à sa valeur d'origine (la valeur doit être comprise entre 0 et 1)
  • La somme de toutes les valeurs =1

Par exemple:

Si j'ai un vecteur

V = [2,2,1,0]

le vecteur normalisé devrait devrait ê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 de "0" --> résultante de la matrice ne change pas
  • un seul élément de la matrice est >0 et tous les autres éléments sont = 0 --> résultante tableau: l'élément >0 est 1 et les autres 0

mais si j'ai une autre affaire,bien que le résultat est proportionnel à la somme n'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 suis pas sûr si le nombre sont corrects parce que je ne peux pas utiliser Matlab pour l'instant, mais je suis sûr que la somme est > 1 )

Ahy soupçon?

Je vous remercie à l'avance

source d'informationauteur dragonmnl