【问题标题】:Principal component analysis (PCA) compute mean using python使用python的主成分分析(PCA)计算平均值
【发布时间】:2013-03-28 22:15:40
【问题描述】:

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

【问题讨论】:

    标签: python numpy face-recognition mean pca


    【解决方案1】:

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

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

    【讨论】:

    • 当我尝试 np.cov(X) 时出现此错误:ValueError:对象未对齐
    • 如果没有看到创建X 的代码,就很难诊断出这个问题。它是一个ndarray吗?如果有,它的形状是什么?我的猜测是 X 不是 ndarray 或者您的图像数组的长度不完全相同。如果图像数组的长度不同,那么在尝试计算协方差时会遇到不同的问题(有或没有 numpy)。
    • @user2229953 似乎X 是从PIL 图像生成的np.arrays 列表。可能应该对X的每个元素进行分析,而不是np.asarray(X)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 2015-07-03
      • 2013-04-07
      • 2012-10-24
      • 2013-03-31
      • 1970-01-01
      • 2013-03-28
      • 2018-09-06
      • 2016-01-18
      相关资源
      最近更新 更多