Мне нужно нормализовать вектор из 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)
Ах намек?
заранее спасибо