MATLAB:从函数内加载

时间:2011-02-21 13:00:30

标签: caching matlab file-io

我有一个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传递?谢谢!

2 个答案:

答案 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次运行,因此时差非常大。