# Hwo to normalize a Matrix ?

8 views (last 30 days)
RT Student on 15 Aug 2021
Edited: Image Analyst on 25 Jan 2022
what is the code to normalize a random complex matrix H according to the following formula:

Fabio Freschi on 16 Aug 2021
Edited: Fabio Freschi on 16 Aug 2021
Following the formula of the OT the normalization has to be done according to the max and min of each row. Note that the matrix in the comment is actually a real matrix. The solution should be:
% random 4x3 matrix
H = abs(sqrt(1/2)*(randn(16,4)+1j*randn(16,4)));
% min/max along the rows
hMin = min(H,[],2);
hMax = max(H,[],2);
% normalization (binary singleton expansion is implicit since Matlab 2016b)
H = (H-hMin)./(hMax-hMin);
In this way, each element in a row is in the range [0 1]
##### 2 CommentsShowHide 1 older comment
영우 오 on 25 Jan 2022
Thank you!!

Image Analyst on 15 Aug 2021
Edited: Image Analyst on 25 Jan 2022
Well I don't know about complex numbers, but for a normal, real valued matrix, you can use the rescale() function, introduced in r2017b:
h = rescale(h, 0, 1);
Image Analyst on 16 Aug 2021
@RT Student the code you gave worked just fine. No error at all. Even when I correct rescale(H, 1, 0) to what I had, rescale(H, 0, 1) it still works.
However Fabio is right - the formula normalizes on a row-by-row basis, not globally like my solution did.
His answer is good and more closely follows your formula. Thanks for accepting it. If you wanted to use the built-in rescale(), you'd have to do it on a row-by-row basis:
% Create data. Note, because of abs() it is all real valued.
H = abs(sqrt(1/2)*(randn(16,4)+1j*randn(16,4)))
% Rescales to global min and max.
%H = rescale(H, 0, 1)
% Rescales min and max to 0-1 on a row-by-row basis.
for row = 1 : size(H, 1)
H(row, :) = rescale(H(row, :), 0, 1);
end

Steven Lord on 16 Aug 2021
Take a look at the normalize function.

R2018b

### Community Treasure Hunt

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

Start Hunting!