How to achieve zero mean and unit variance

I have a matrix 50x3000. How do I achieve zero mean and unit variance
Also How would i normalize the same after applying zero mean and unit variance?

3 Comments

After you normalize to 0 mean and 1 var, why are you normalizing again? Why not go to your target values all in one operation? Why "normalize" twice? What's the mean and variance the second time?
Ok sorry for asking in the wrong way. What I meant was once I get zero mean and assign to variable X, then do I dot standard deviation on this variable X, or on the original matrix?
You do it on the shifted version of X. Subtracting the mean merely shifts X without narrowing its distribution. So then you divide to narrow or widen the distribution (X) without shifting it (because it's already shifted).

Sign in to comment.

Answers (2)

Nils
Nils on 27 Nov 2015
You can use the zscore function to zero mean / unit variance any array of data.
For a given matrix A,
A = reshape(zscore(A(:)),size(A,1),size(A,2));
will return the matrix A where all elements now follow a zero mean / unit variance distribution.
It is important to linearize A as the input to zscore, then reshape the output, because zscore will operate differently if you feed it an N-D array rather than a vector.

4 Comments

@Nils when i'm using this code(A = reshape(zscore(A(:)),size(A,1),size(A,2));) got an answer like this >> mean(cA3)
ans =
1.0e-15 *
-0.2722 -0.2722 -0.2722 -0.2722 -0.2722 -0.2722
>> var(cA3)
ans =
1.0278 1.0278 1.0278 1.0278 1.0278 1.0278
is this correct?
1.0e-15 times those values is probably zero to within numeric round-off, depending on the range of the original values.
If you were to use
format long g
then you would see a less confusing output.
@Walter Roberson Now getting the answer like this >> mean(cA3)
ans =
Columns 1 through 5
-2.72183709262942e-16 -2.72183709262942e-16 -2.72183709262942e-16 -2.72183709262942e-16 -2.72183709262942e-16
Column 6
-2.72183709262942e-16
>> var(cA3)
ans =
Columns 1 through 5
1.02777777777778 1.02777777777778 1.02777777777778 1.02777777777778 1.02777777777778
Column 6
1.02777777777778
is this nomalized ?
Might be normalized. The 1e-16 means are round off error that are impossible to avoid in floating point

Sign in to comment.

3 Comments

However when i tried this, some elements turned out negative
X=X-mean(X(:)); and unit variance by dividing by the standard deviation:
X=X/std(X(:));
Of course some X will be negative. I'd say about half of them will be . Why are you expecting something else ?
How would you have a mean of zero (and a non-zero variance) if some of the elements were not negative?

Sign in to comment.

Asked:

syd
on 13 Apr 2014

Commented:

on 30 Jan 2017

Community Treasure Hunt

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

Start Hunting!