【问题标题】:Principal Component Analysis (PCA) - accessing shape主成分分析 (PCA) - 访问形状
【发布时间】:2013-03-28 07:53:51
【问题描述】:

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

有人可以帮忙吗?

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

【问题讨论】:

    标签: python numpy pca face-recognition principal-components


    【解决方案1】:

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

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

    Python 列表没有形状属性。在这个列表中是 NumPy 数组,do 有一个 shape 属性。所以你可以说

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

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


    这是使用 PCA 和状态向量机完成的example of face recognition。这里是another related example

    【讨论】:

      【解决方案2】:

      当你这样做时

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

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

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

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

      dim0 = X[0].shape

      【讨论】:

      • 它会返回一个list,它存储在局部变量X
      猜你喜欢
      • 1970-01-01
      • 2015-07-29
      • 2013-03-31
      • 2012-10-24
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      相关资源
      最近更新 更多