我是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'
答案 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)