2013-04-05 4 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

2

Как вы определили, X список:

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

списков Python не имеют атрибута формы. Внутри этого списка представлены массивы NumPy, которые do имеют атрибут формы. Таким образом, можно сказать, что

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

(Вы не объяснить, что dim должен представлять ...)


Вот example of face recognition сделано с РСА и вектор состояния машины. Вот another related example.