主成分分析(PCA)使用python计算平均值

时间:2013-04-06 14:02:46

标签: python numpy face-recognition mean pca

我是python的初学者,我正在使用python实现主成分分析(PCA),但是我在计算均值时遇到了问题。 这是我的代码:

import Image
import os
from PIL import Image
from numpy import *
import numpy as np


#import images
dirname = "C:\\Users\\Karim\\Downloads\\att_faces\\New folder"
X = [np.asarray(Image.open(os.path.join(dirname, fn))) for fn in os.listdir(dirname)]

#get number of images and dimentions
path, dirs, files = os.walk(dirname).next()
num_images = len(files)
image_file = "C:\\Users\\Karim\\Downloads\\att_faces\\New folder\\2.pgm"
img = Image.open(image_file)
width, height = img.size

print width
print height
print num_images

M = (X-mean(X.T,axis=1)).T # subtract the mean (along columns)

我收到错误:

AttributeError: 'list' object has no attribute 'T'

2 个答案:

答案 0 :(得分:2)

最后一行中的问题是X.T,因为X是一个python列表,而不是numpy.ndarray。目前尚不清楚你在这里要做什么,但如果你想把所有的图像数组合成一个numpy数组,你可以在最后一行之前转换X = np.array(X)

此外,除非您特别想要推出自己的PCA实现,否则使用np.cov(用于协方差计算)和np.linalg.eig(计算特征值和特征向量)可以更轻松地使用numpy。协方差矩阵)。

答案 1 :(得分:0)

images -= np.mean(images, axis=0)