[Numpy-discussion] PCA on set of face images
Peter Skomoroch
peter.skomoroch at gmail.com
Sat Mar 1 02:18:52 EST 2008
I think that is correct...
Here is what the final result should look like:
http://www.datawrangling.com/media/images/first_16.png
If the dimensions for the sample faces don't work out to ( 361 x 361 ) in
the end, then you are likely to be missing a transpose somewhere. Also, be
aware that the scipy linalg.eig by default returns a vector of eigenvalues
and a matrix, but the Matlab eig(), returns 2 matrices ( the eigenvalues are
multiplied by an identity matrix to get a diagonal matrix). You can check
out the mathesaurus reference sheet for help translating the example into
python, but hopefully this will point you in the right direction:
see:
http://www.mathworks.com/access/helpdesk/help/techdoc/ref/eig.html
vs:
>>> help(linalg.eig)
>
> Help on function eig in module scipy.linalg.decomp:
>
> eig(a, b=None, left=False, right=True, overwrite_a=False,
> overwrite_b=False)
> Solve ordinary and generalized eigenvalue problem
> of a square matrix.
>
> Inputs:
>
> a -- An N x N matrix.
> b -- An N x N matrix [default is identity(N)].
> left -- Return left eigenvectors [disabled].
> right -- Return right eigenvectors [enabled].
> overwrite_a, overwrite_b -- save space by overwriting the a and/or
> b matrices (both False by default)
>
> Outputs:
>
> w -- eigenvalues [left==right==False].
> w,vr -- w and right eigenvectors [left==False,right=True].
> w,vl -- w and left eigenvectors [left==True,right==False].
> w,vl,vr -- [left==right==True].
>
> Definitions:
>
> a * vr[:,i] = w[i] * b * vr[:,i]
>
> a^H * vl[:,i] = conjugate(w[i]) * b^H * vl[:,i]
>
> where a^H denotes transpose(conjugate(a)).
>
On Sat, Mar 1, 2008 at 12:41 AM, devnew at gmail.com <devnew at gmail.com> wrote:
>
>
> On Mar 1, 12:57 am, "Peter Skomoroch" wrote:
> I think
> > > matlab example should be easy to translate to scipy/matplotlib using
> the
> > > montage function:
> >
> > > load faces.mat
> > > %Form covariance matrix
> > > C=cov(faces');
> > > %build eigenvectors and eigenvalues
> > > [E,D] = eig(C);
>
>
> hi Peter,
> nice code..ran the examples..
> however couldn't follow the matlab code since i have no exposure to
> matlab..was using numpy etc for calcs
> could you confirm the layout for the face images data? i assumed that
> the initial face matrix should be
> faces=a numpy matrix with N rows ie N=numofimages
>
> row1=image1pixels as a sequence
> row2=image2pixels as a sequence
> ...
> rowN=imageNpixels as a sequence
>
>
> and covariancematrix=faces*faces_transpose
>
> is this the right way?
> thanks
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion at scipy.org
> http://projects.scipy.org/mailman/listinfo/numpy-discussion
>
--
Peter N. Skomoroch
peter.skomoroch at gmail.com
http://www.datawrangling.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20080301/16ec9ef2/attachment.html>
More information about the NumPy-Discussion
mailing list