мне нужно нормализовать вектор N целых чисел, так что:Как нормализовать вектор в Matlab, где сумма равна 1?
- Каждое значение пропорционально своему исходному значению (значение будет находиться в диапазоне от 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» -> результирующий массив не изменяется
- только один элемент ARRA y> 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)
AHY намек?
Спасибо заранее
В качестве побочного элемента 'sum (v)' не может математически квалифицироваться как [норма] (http://en.wikipedia.org/wiki/Norm_ (математика)), поскольку он может давать отрицательные значения. –
Не соответствует требованию всех значений от 0 до 1 (с учетом отрицательных элементов). – Tobold
Согласен. Я не должен был использовать «нормализацию» вместо «нормы», как и ОП. Я отредактирую свой ответ соответственно. – Deve