我有一个MATLAB函数需要访问某些largeFile.mat的数据。如果(为了避免污染全局命名空间)我将load命令放在函数中,每次调用函数时MATLAB都会重新加载largeFile,还是智能足以在调用之间缓存largeFile? E.g。
function hello()
load largeFile.mat;
display('hi');
end
for i=1:1000
hello();
end
我应该将load命令保留在函数中,还是应该执行一次并将largeFile的数据作为arg传递?谢谢!
答案 0 :(得分:18)
solution from Ghaul(将数据加载到结构中并将其作为参数传递)是我通常建议的,因为它避免了将文件名/路径硬编码到函数中,这需要您编辑函数每次文件名或位置发生变化时。
但是,为了完整起见,还有另一种解决方案:使用persistent variables。这些是函数本地的变量,它们在函数调用之间将它们的值保留在内存中。根据您的情况,您可以这样做:
function hello()
persistent data; %# Declare data as a persistent variable
if isempty(data) %# Check if it is empty (i.e. not initialized)
data = load('largeFile.mat'); %# Initialize data with the .MAT file contents
end
display('hi');
end
答案 1 :(得分:6)
Matlab将在每次调用时加载它,因此调用它一次并将其作为输入更快。如果您不想使工作区混乱,我建议您将文件加载到结构中,例如
L = load('largeFile.mat');
编辑:我对你的hello()函数和我的一个.mat文件进行了快速测试。将其加载到函数内并运行100次我使用了43.29秒。加载一次并将其作为输入花费0.41秒进行100次运行,因此时差非常大。