0

我是 python 的初学者,我正在尝试将主成分分析 (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'

有人可以帮忙吗?

详细教程的链接将不胜感激

4

2 回答 2

2

正如您所定义的,X是一个列表:

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

Python 列表没有形状属性。在这个列表中是 NumPy 数组,它们确实具有 shape 属性。所以你可以说

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

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


这是使用 PCA 和状态向量机完成的人脸识别示例。这是另一个相关的例子

于 2013-04-05T19:18:13.883 回答
1

当你这样做

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

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

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

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

dim0 = X[0].shape等等

于 2013-04-05T19:18:26.697 回答