Calculating Covariance Matrix in Matlab
covariance, matlab
Solution
In short: `cov` mainly just adds convenience to the bare formula.
If you type
edit cov
You'll see a lot of stuff, with these lines all the way at the bottom:
xc = bsxfun(@minus,x,sum(x,1)/m); % Remove mean
if flag
xy = (xc' * xc) / m;
else
xy = (xc' * xc) / (m-1); % DEFAULT
end
which is essentially the same as your first line, save for the subtraction of the column-means.
Read the wiki on sample covariances to see why there is a minus-one in the default path.
Note however that your first line uses normal transpose (`.'`), whereas the `cov`-version uses conjugate-transpose (`'`). This will make the output of `cov` different in the context of complex-valued data.
Also note that `cov` is a function call to a non-built in function. That means that there will be a (possibly severe) performance penalty when using `cov` in a loop; Matlab's JIT compiler cannot accelerate non-built in functions.
Problem
I am implementing a PCA algorithm in MATLAB. I see two different approaches to calculating the covariance matrix: ``` C = sampleMat.' * sampleMat ./ nSamples; ``` and ``` C = cov(data); ``` What is the difference between these two methods? PS 1: When I use `cov(data)` is that unnecessary: ``` meanSample = mean(data,1); data = data - repmat(data, nSamples, 1); ``` PS 2: At first approach should I use `nSamples` or `nSamples - 1`?