我将在MATLAB中同时运行20个函数/过程来分析大数据集。每个函数都访问这个大数据集的一部分。缓存是我的主要组件,我需要证明MATLAB可以使用缓存容量。我想:
每个函数默认保留缓存空间以保存/修改/删除/查找缓存空间中的一些内容/数据
每个函数都可以从其他函数保留的其他缓存空间中请求一些所需的内容/数据
答案 0 :(得分:1)
检查MatLab(和persistent
函数)中mlock
变量的文档。它部分涵盖了您的需求。但是,在访问持久变量时会遇到一些问题,并且在更新函数源文件时会清除持久变量。
我建议您使用缓存文件(当然,如果我正确理解您的意思)。 例如,您可以从这种方法开始(我假设每个函数都在单独的* .m文件中)
function CacheFileName = GenerateCacheFileName(Caller)
CacheFileName = sprintf('%s.cache.mat',Caller);
% you may use any alogrithm that makes sense for you
% but keep the MAT extension for the simple syntax of LOAD function
end
function Data = LoadCachedData(Caller)
% Generate cache file name for current function
CacheFileName = GenerateCacheFileName(Caller);
if exist(CacheFileName,'file')==2
% load cache file if it exists
RawData = load(CacheFileName);
Data = RawData.CacheStructure;
else
% or initialize the cahce with empty structure
Data = struct;
end
end
function DoSomethingUsingCache(arguments)
% Generate cache file name for current function
CacheFileName = GenerateCacheFileName(mfilename);
% Load cached data
if exist(CacheFileName,'file'==2)
% load cache file if it exists
CacheStructure = load(CacheFileName);
else
% or initialize the cahce with current datestamp
CacheStructure.Created = now;
end
% do what you need here
% Save data to cache for later use
save(CacheFileName,'CacheStructure');
end
如果您需要从其他功能加载一些数据,请执行以下操作:
function DoSomethingUsingCacheOfOtherFunction(arguments)
% Load chached data of other function
CacheStructure2 = LoadCachedData('DoSomethingUsingCache');
% do what you need here
if isfield(CacheStructure,'Param4')
CacheStructure.Param4 = CacheStructure.Param4 + 10;
else
CacheStructure.Param4 = 0;
end
% you may also update the cache for other function if you need
save(CacheFileName2,'CacheStructure2');
end
显然,这种方法应该设计得恰当,否则MatLab将花费大部分时间来加载/保存您的数据。
原则上,这种方法可以作为MatLab类与set / get方法一起呈现,以便更轻松地编写代码。 可能是如果您在根命名空间中创建了一个对象,则可以将其用作"缓存的数据管理器"。