не может преобразовать массив размером 1934 в форму (3,1)
Я хочу создать свой собственный PCA на Python для набора данных, имеющего форму (1934,32). Массив Numpy (файл двоичного изображения). В PCA мне нужно рассчитать матрицу рассеяния. У меня есть код, который отлично работает с изображениями и массивом размеров (3,x). но не работает на моем.
Я попытался изменить форму np.zeros и метод reshape на 32 и 1934, но ничего не работает. Вот пример кода, который я использую прямо сейчас
for i in range(X.shape[1]):
scatter_matrix += (X[:,i].reshape(3,1) - mean_vector).dot((X[:,i].reshape(3,1) - mean_vector).T)
print('Scatter Matrix:\n', scatter_matrix)
Ошибка: "Не удается преобразовать массив размером 1934 в форму (3,1)".
1 ответ
Я нашел решение, добавив матрицу рассеяния размерности (1934,1934) вместо (3,1). И пока он работает нормально. Код выглядит следующим образом
scatter_matrix = np.zeros((1934,1934))
for i in range(X.shape[1]):
print('first',i)
A = X[:,i].reshape(1934,1) - mean
#print(A)
B = (X[:,i].reshape(1934,1) - mean).T
#print(B)
sb = A.dot(B)
print(sb)
#scatter_matrix += (A).dot(B)
#print(i)
print('Scatter Matrix:\n', scatter_matrix)
Но теперь я застрял с вычислением скалярного произведения в приведенном выше коде. Это занимает слишком много времени даже в среде графического процессора Kaggle. Я даже не могу получить результат за одну итерацию по набору данных.
Есть ли какое-нибудь решение, чтобы сделать это быстрее?