How to normalize vector to unit length

조회 수: 436 (최근 30일)
DSB
DSB 2017년 3월 11일
댓글: Oleksii Doronin 2021년 5월 27일
how to normalize vector of features to unit length to generate a probability density function (pdf) also what the normalization can do for the vector?

답변 (3개)

John D'Errico
John D'Errico 2017년 3월 11일
편집: John D'Errico 2017년 3월 11일
Vector norms are linear, in the sense that for constant k and vector V,
norm(k*V) = k*norm(V)
So all you need do is
V = V/norm(V);
Which will force the norm(V) to now be 1.
Your other question, "what can a norm do for a vector" makes no sense. Sorry. If you can clarify what you mean, I might be able to answer.
  댓글 수: 3
John D'Errico
John D'Errico 2017년 3월 12일
편집: John D'Errico 2017년 3월 12일
At the same time, norm is more robust. The computation that Jan shows will fail on some vectors where norm will not.
A very simple example where that is true is:
V = [1e200, 1e190];
norm(V)
ans =
1e+200
sqrt(V*V')
ans =
Inf
Jan
Jan 2017년 3월 12일
Thanks, John. I was not aware that norm() uses the stable hypot approach.

댓글을 달려면 로그인하십시오.


vahid rowghanian
vahid rowghanian 2021년 5월 22일
편집: vahid rowghanian 2021년 5월 23일
For a 2-D feature vector R that variables are along columns and samples are along rows, use the following code to normalize the feature to unity range (0-1) with respect to min and max values of each column (feature vector).
Rmax = repmat(max(R), size(R,1), 1);
Rmin = repmat(min(R), size(R,1), 1);
R_unity = (R - Rmin)./(Rmax - Rmin);
For normalizing gray or 3-D or more (any number of channel matrices) that contain negative or positive values that need to be confined in unity range (0-1), the code below will help:
im = double(im);
immin = repmat(min(min(im)), size(im,1), size(im,2));
immax = repmat(max(max(im)), size(im,1), size(im,2));
imu = (im - immin)./(immax - immin);
The Matlab function normalize(A), normalizes vector or matrix A to the center 0 and standard deviation 1. The result will be in range (-1,1).
In case by normalization you mean to make the sum of each column to be equal to one, one possible way for matrix D which can even be a multidimensional is:
Dnorm = bsxfun(@rdivide, D, sum(D));
Now, each column summation will be one (see sum(Dnorm) ).

Steven Lord
Steven Lord 2021년 5월 22일
The normalize and vecnorm functions may also be of use to you.
  댓글 수: 1
Oleksii Doronin
Oleksii Doronin 2021년 5월 27일
Function normalize does not give the needed answer. Instead, it treats vector as a set of points, then centers it around 0 and then normalizes.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Volume Visualization에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by