存储临时变量时,Matlab 需要更多时间
Matlab take more time when storage a temporary variable
当我运行编写这个示例代码时,我发现它在第 8 行花费了更多时间。我不知道为什么,有什么技巧可以让它更快吗??
x和y值不重要,我只是好奇红线为什么要花那么多时间,在实际代码中,它们是两个复杂的表达式,为什么存储要花这么多时间?
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
与向量运算相比,显式循环通常会比较慢。在这种情况下你可以这样做:
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
当我运行编写这个示例代码时,我发现它在第 8 行花费了更多时间。我不知道为什么,有什么技巧可以让它更快吗??
x和y值不重要,我只是好奇红线为什么要花那么多时间,在实际代码中,它们是两个复杂的表达式,为什么存储要花这么多时间?
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
与向量运算相比,显式循环通常会比较慢。在这种情况下你可以这样做:
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