Умножение матрицы на Numpy занимает слишком много времени - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь просто реализовать функцию потерь (MSE) в Python, используя numpy, и это мой код:

import numpy as np

def loss(X, y, w):
    N = (X.shape)[0]
    X_new = np.concatenate((np.ones((N, 1)), X), axis=1)
    E = y-np.matmul(X_new, w)
    E_t = np.transpose(E)
    loss_value = (1/N)*(np.matmul(E_t, E))
    return loss_value

Размер E равен (15000, 1) и E_t очевидно (1,15000). Однако при отладке я понял, что np.matmul(E_t,E) занимает слишком много времени. У меня есть ноутбук с 16 ГБ оперативной памяти и Core i7, поэтому для меня странно, что np.matmul здесь не работает. Это нормально, если матрицы, с которыми я имею дело, имеют такие размеры?

1 Ответ

0 голосов
/ 04 мая 2020

На довольно простом c 4-гигабайтном компьютере:

In [477]: E=np.ones((15000, 1))                                                                        
In [478]: E.T@E                                                                                        
Out[478]: array([[15000.]])
In [479]: timeit E.T@E                                                                                 
10.5 µs ± 241 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

Вы ничего не говорите нам о X, но в худшем случае:

In [480]: E=np.ones((15000, 1),object)                                                                 
In [481]: E.T@E                                                                                        
Out[481]: array([[15000]], dtype=object)
In [482]: timeit E.T@E                                                                                 
577 µs ± 492 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...