gpt4 book ai didi

optimization - 相同代码的 MATLAB 速度差异

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:40 25 4
gpt4 key购买 nike

我有一些我一直在使用的 MATLAB 代码。共有三个部分,例如 A、B 和 C。A 和 C 可以更改,B 保持不变。

我所做的是将 A、B 和 C 分成单独的 .m 文件(不是函数,只是脚本)。 A 只是创建一组变量,B 包含逻辑,C 包含结果绘图。我将 D 称为一个文件,我所做的只是依次线性复制/粘贴 A、B 和 C 的全部内容。

如果我运行 A,然后运行 ​​B,然后运行 ​​C,则 B 中的迭代进行得非常缓慢,每次迭代大约需要 15 秒。如果我运行 D(先粘贴 A,然后粘贴 B,然后粘贴 C),它会运行得很快,每次迭代大约需要 2 秒。

鉴于 MATLAB 以完全相同的顺序运行完全相同的代码,为什么两者的执行时间会有如此大的不同?

最佳答案

我相信你有内存问题。 Matlab 函数实际上将其输入变量作为指针获取,但如果更改数据,它就会变成副本。因此,如果 A、B、C 有大量的输入和输出,并且它们中的每一个都修改了一些数据的一小部分,那么您将获得大量的内存分配。

例如:

function Main()
x = imread('peppers.png');
for i=1:size(x,1)
for j=1:size(x,2)
x = ChangePixel(x,i,j);
end
end
imshow(x);
end

function A = ChangePixel(A,i,j)
A(i,j,:) = A(i,j,[3 2 1]);
end

这段代码会很慢,因为 ChangePixel 每次都会分配一个新矩阵。

有时,Matlab 可以检测到这些类型的操作并使用内部优化。但是,是否会发生无法预知,所以最好避免这种操作。

关于optimization - 相同代码的 MATLAB 速度差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com