Matlab занимает больше времени при хранении временной переменной - PullRequest
0 голосов
/ 23 февраля 2020

Когда я запускаю этот пример кодов, я обнаружил, что это занимает больше времени в 8 строке. Я не знаю почему, и есть ли какие-нибудь советы, позволяющие ускорить его? два сложных выражения, почему хранение занимает так много времени?

result = zeros(2, 1000);
x=0;y=0;
tic
for i =1:200
    for j =1:200
        for k =1:1000
            x=x+x/2+2*y; y=y+x*y/2;
            result(:, k) = [x;y];
        end
        sum(result); % or other operations, just for example
    end
end
toc

enter image description here

1 Ответ

2 голосов
/ 23 февраля 2020

Явное зацикливание обычно будет медленным по сравнению с векторными операциями. В этом случае вы можете сделать:

x=0;y=0;
tic
for i =1:200
    for j =1:200
      result=[x+(1:1000)*i; y+(1:1000)*j];
      x=x+1000*i;
      y=y+1000*j;
      sum(result); % or other operations, just for example
    end
end
toc

Редактировать: В вашем пересмотренном примере выполните явное обновление вместо построения вектора и назначения среза:

result = zeros(2, 1000);
x=0;y=0;
tic
for i =1:200
    for j =1:200
        for k =1:1000
            x=x+x/2+2*y; y=y+x*y/2;
            result(1, k) = x;
            result(2, k) = y;
        end
        sum(result); % or other operations, just for example
    end
end
toc
...