Как мне нормализовать вектор в Matlab, если сумма равна 1?

Мне нужно нормализовать вектор из N целых чисел так, чтобы:

  • Каждое значение было пропорционально его исходному значению (значение будет между 0 и 1)
  • Сумма всех значений равна =1

Например:

Если у меня есть вектор

V = [2,2,1,0]

, нормализованный вектор должен быть:

V_norm = [0.4,0.4,0.2,0]  % 0.4+0.4+0.2 = 1

Я попробовал многие решения, найденные в этом сообществе и в Интернете, и, наконец, я сделал это с помощью этого кода:

part = norm(V);
if part > 0
  V_norm = V/part;
else % part = 0 --> avoid "divide by 0" 
  V_norm = part;
end

Эта проблема работает, если:

  • все элементы массива равны "0" --> результирующий массив не меняется
  • только один элемент массива >0, а все остальные элементы = 0 --> результирующий массив: элемент> 0 равен 1, а другой 0

, но если у меня другой случай, хотя результат пропорционален, сумма не равна 0. Например:

   V = [1,0,1]
   V_norm = [0.74,0,0.74]

   V = [1,1,1]
   V_norm = [0.54,0.54,0.54]

(я не уверен, что число правильное, потому что я не могу использовать Matlab прямо сейчас, но я уверен, что сумма > 1 )

А подсказка?

Заранее спасибо

9
задан dragonmnl 27 June 2012 в 10:52
поделиться