[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