Некоторое время я работал над логитами, для чего мне нужно использовать встроенную функцию 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.