Я пытаюсь сделать анализ основных компонентов (PCA) с помощью python. Вот мой код:Ошибка Python - Анализ основного компонента (PCA)
import os
from PIL import Image
import numpy as np
import glob
from matplotlib.mlab import PCA
#Step1: put database images into a 3D array
filenames = glob.glob('C:\\Users\\Karim\\Downloads\\att_faces\\New folder/*.pgm')
filenames.sort()
img = [Image.open(fn).convert('L') for fn in filenames]
images = np.dstack([np.array(im) for im in img])
# Step2: create 2D flattened version of 3D input array
d1,d2,d3 = images.shape
b = np.zeros([d1,d2*d3])
for i in range(len(images)):
b[i] = images[i].flatten()
#Step 3: PCA
results = PCA(b)
results.Wt
, но я получаю сообщение об ошибке RuntimeError: we assume data in a is organized with numrows>numcols
Я попытался заменить b = np.zeros([d1,d2*d3])
на b = np.zeros([d2*d3, d1])
я получил ValueError: could not broadcast input array from shape (2760) into shape (112)
кто-нибудь может мне помочь?
Спасибо за помощь. Я понял, что это более логично, но при попытке кода, который вы предложили избавиться от второй ошибки, я получил еще одну ошибку: 'AttributeError: flatten' – user2229953
Я предполагал, что элементы' img' были numpy массивы. См. Мое редактирование –
снова. У меня есть ошибка, аналогичная второй ошибке: 'ValueError: не удалось передать входной массив из формы (10304) в форму (2760)' – user2229953