0

我是 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'
4

2 回答 2

2

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

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

于 2013-04-06T15:03:22.957 回答
0

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

于 2013-04-09T00:43:06.837 回答