Анализ основных компонентов (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. Вот еще один связанный пример.