2013-04-05 42 views
0

我是一名Python初学者,我试图将主成分分析(PCA)应用于一组图像。我想把图像放在矩阵中以便能够执行PCA。我仍然在开始,但我有错误。主成分分析(PCA) - 访问形状

import numpy as np 
import Image 
import os 

#insert images to matrix 
dirname = 'C:\Users\Karim\Downloads\shp_marcel_train\Marcel-Train\A' 
X = [np.asarray(Image.open(os.path.join(dirname, fn))) for fn in os.listdir(dirname)] 

#get dimensions 
num_data,dim = X.shape 

它给AttributeError: 'list' object has no attribute 'shape'

任何人都可以帮忙吗?

到一个详细的教程链接,将不胜感激

回答

1

当你

[np.asarray(Image.open(os.path.join(dirname, fn))) for fn in os.listdir(dirname)]

它会返回一个数组,它存储在局部变量X

您正在尝试从列表中提取变量,因此错误。

X中的单个元素具有形状属性。因此,你需要做这样的事情(修改它根据数据结构shape被定义为)

dim0 = X[0].shape

+2

它会返回一个___list___,这是存储在本地变量'X' – askewchan 2013-04-05 19:53:56

2

当你定义它,X是一个列表:

X = [... for fn in ...] 

Python列表没有形状属性。在这个列表里面有NumPy数组,其中做的有一个shape属性。所以,你可以说

num_data = len(X) 
shape_of_first_array = X[0].shape 

(你没有解释什么dim应该代表......)


下面是PCA和状态向量机做了一个example of face recognition。这里是another related example