File Exchange ## Fast SVD and PCA

version 1.3.0.0 (3.35 KB) by Vipin Vijayan

### Vipin Vijayan (view profile)

Fast truncated SVD and PCA rectangular matrices

23 Downloads

Updated 07 Jul 2014

View License

Truncated Singular Value Decomposition (SVD) and Principal Component Analysis (PCA) that are much faster compared to using the Matlab svd and svds functions for rectangular matrices.
svdecon is a faster alternative to svd(X,'econ') for long or thin matrices.
svdsecon is a faster alternative to svds(X,k) for dense long or thin matrices where k << size(X,1) and size(X,2).
PCA versions of the two svd functions are also implemented.
---

function [U,S,V] = svdecon(X)
function [U,S,V] = svdecon(X,k)

Input:
X : m x n matrix
k : gets the first k singular values (if k not given then k = min(m,n))

Output:
X = U*S*V'
U : m x k
S : k x k
V : n x k

Description:
svdecon(X) is equivalent to svd(X,'econ')
svdecon(X,k) is equivalent to svds(X,k) where k < min(m,n)
This is faster than svdsecon when k is not much smaller than min(m,n)

---

function [U,S,V] = svdsecon(X,k)

Input:
X : m x n matrix
k : gets the first k singular values, k << min(m,n)

Output:
X = U*S*V' approximately (up to k)
U : m x k
S : k x k
V : n x k

Description:
svdsecon(X,k) is equivalent to svds(X,k) where k < min(m,n)
This function is useful if k << min(m,n) (see doc eigs)

---

function [U,T,mu] = pcaecon(X,k)

Input:
X : m x n matrix
Each column of X is a feature vector
k : extracts the first k principal components

Output:
X = U*T approximately (up to k)
T = U'*X
U : m x k
T : k x n

Description:
Principal Component Analysis (PCA)
Requires that k < min(m,n)

---

function [U,T,mu] = pcasecon(X,k)

Input:
X : m x n matrix
Each column of X is a feature vector
k : extracts the first k principal components, k << min(m,n)

Output:
X = U*T approximately (up to k)
T = U'*X
U : m x k
T : k x n

Description:
Principal Component Analysis (PCA)
Requires that k < min(m,n)
This function is useful if k << min(m,n) (see doc eigs)

Mark Wagner

### Mark Wagner (view profile)

Code is well written, but it's easy to demonstrate that it works nearly an order of magnitude slower than the inbuilt MATLAB svd() function

Giuseppe Di Massa

Xu Jun

### Xu Jun (view profile)

It has bug which generate NaN or Inf in the 'svdecon.m' function.

Lifang Yu

### Lifang Yu (view profile)

I'm working on spliting an image into many small matrix, so very fast svd on small size matrix is what I need. This svd implementaion is lower than Matlab's svd when processing small size matrix. I don't try it on matrix with large size.

khthung

### khthung (view profile)

Thanks, it works for me and it does not have convergence problem when I run it in linux server. Matlab built-in svd function will give me convergence error.

### Updates

 7 Jul 2014 1.3.0.0 Uses less memory now 3 Jul 2014 1.2.0.0 Truncated 3 Jul 2014 1.1.0.0 Title change
##### MATLAB Release Compatibility
Created with R2013a
Compatible with any release
##### Platform Compatibility
Windows macOS Linux

Inspired: EOF