Normalize to unit norm

I have a variable containing a probability distribution (just an one-dimensional array of values). How can I normalize a to unit norm?

 Accepted Answer

If you want to normalize a vector to have unit L2 norm.
x = randn(100,1);
x = x./norm(x,2);
norm(x,2)

12 Comments

Nuchto
Nuchto on 27 May 2012
Thanks, Wayne, for your quick reply :) However, I don't understand. My values in x should add up to 1, but I can't find the new array of elements in x with the new values that would add up to 1.
They're in ans.
Nuchto
Nuchto on 27 May 2012
ANS is just a value (1), is not an array of values that add up to zero.
My mistake, ans proves that the x values are normalized to a unit L2 norm.
Nuchto
Nuchto on 27 May 2012
when I sum(x) after the second line, the sum doesn't add up to 1.
Nuchto
Nuchto on 30 May 2012
Help!!!
x./sum(x)
Now, this is not a unit norm normalization (as I understand it, thus nobody answered earlier).
Nuchto
Nuchto on 1 Jun 2012
What is a unit norm normalization as you understand it?
"Unit norm" itself is not well-defined without specifying the norm itself.
@Nuchto, it sounds like you are looking for the l1 norm, while the initial answer provided by @Wayne is using the l2 norm...
As @Oleg suggested, you can normalize by the sum to obtain the same as the following
normX = x/norm(x,1)
Be careful if simply normalizing by the sum because it doesn't account for negative values in the original vector. However, since you are working with a probability distribution, that isn't an issue.
"same as the following
normX = x/norm(x,1)"
IF all x >0.
Nuchto
Nuchto on 2 Jun 2012
Thanks, it works now. What is in lay terms :) the difference between l1 and l2 norm?
http://en.wikipedia.org/wiki/Norm_%28mathematics%29, Euclidean vs taxicab

Sign in to comment.

More Answers (0)

Categories

Find more on Random Number Generation in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!