не может преобразовать массив размером 1934 в форму (3,1) - PullRequest
0 голосов
/ 22 октября 2019

Я хочу построить свой собственный PCA на python для набора данных, имеющего форму (1934,32). Numpy массив (двоичный файл изображения). В PCA мне нужно рассчитать матрицу рассеяния. У меня есть код, который отлично работает на изображениях и массив размеров (3, х). но не работает на моем.

Я попытался изменить метод np.zeros и изменить форму до 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 Ответ

0 голосов
/ 23 октября 2019

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

Есть ли какое-либо решение, способное ускорить его?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...