Анализ основных компонентов (PCA) - доступ к форме

Я новичок в 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'

кто-нибудь может помочь?

ссылка на подробный учебник будет оценена

2 ответа

Решение

Когда вы делаете

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

Он вернул бы массив, который хранится в локальной переменной X

Вы пытаетесь извлечь переменные из списка, и, следовательно, ошибка.

Отдельные элементы внутри X имеют атрибуты формы. Следовательно, вам нужно сделать что-то вроде этого (изменить его в соответствии с структурой данных shape определяется как)

dim0 = X[0].shape и так далее

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

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

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

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

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


Вот пример распознавания лиц, сделанного с помощью PCA и State Vector Machine. Вот еще один связанный пример.

Другие вопросы по тегам