не может преобразовать массив размером 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. Я даже не могу получить результат за одну итерацию по набору данных.

Есть ли какое-нибудь решение, чтобы сделать это быстрее?

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