Я некоторое время работал над логитами, для которых мне нужно использовать встроенную функцию exp ().Кажется, что это работает медленнее для большой матрицы по сравнению с использованием цикла for с меньшими порциями той же матрицы.
В документации Matlab и некоторых других формах всегда рекомендуется векторизовать код, чтобы ускоритьэто до.Но, похоже, это не так.
n = 32;
rows = 50000;
cols = 32;
a = rand(n*rows, cols);
b = rand(rows, cols);
% in a loop
tic
for i=1:n
d = exp(b);
end
toc
% big matrix
tic
d = exp(a);
toc
Я ожидал, что первый тик-медленнее, чем второй.Но вывод, который я получил, был следующим:
Elapsed time is 0.335781 seconds.
Elapsed time is 0.390191 seconds.
Любая идея о том, почему это так, будет полезна.
Редактировать 1 Допустим, я редактирую свойкод, подобный этому, чтобы использовать случайные значения каждый раз:
n = 32;
rows = 50000;
cols = 32;
% in a loop
tic
for i=1:n
d = exp(rand(rows, cols));
end
toc
% big matrix
tic
e = exp(rand(n*rows, cols));
toc
return
Я все еще получаю:
Elapsed time is 0.745808 seconds.
Elapsed time is 0.847162 seconds.