【发布时间】:2014-04-18 14:19:32
【问题描述】:
在一个 MATLAB 程序中,我多次(超过 300 万次)调用了一个函数,该函数将图像中的局部坐标转换为全局坐标,这只是一个简单的转换。我的整个代码运行需要 6 分钟,坐标转换函数需要 20% 的时间。
如何优化这段代码?
function LMP_glb = do(pnt_val,LMP,NP_glb)
NP_co = ones(1,3)*round(pnt_val+1);
LMP_glb = [NP_glb(1:3) + LMP(1:3) - NP_co(1:3)]; %basic operations
end
注意:这个函数是从我的代码中的其他几个函数调用的(不是在一个无限的 for 循环中)。
谢谢。
【问题讨论】:
-
我认为您需要针对调用函数进行优化,因为它看起来在这个函数中没有做太多。调用它一百万次并没有帮助。另外,我认为您可以直接将
LMP_glb设为LMP_glb = [NP_glb(1:3) + LMP(1:3) - round(pnt_val+1)];。如果pnt_val是一个标量,MATLAB 会处理您在其上一行执行的大小调整。 -
我同意。试试看能不能避免在几个地方调用这个函数。也许可以重复使用一次调用的结果而不是另一次调用。
-
是的,您可以在一开始就预先计算所有坐标的结果(+在这种情况下使用矢量化),然后将这些结果作为参数传递给所有其他函数(会有只要您不修改子函数中的缓存结果,就没有复制开销)。
标签: arrays matlab optimization