Matlab | 算法运行过程中间项的文件存储与读取
2016-07-11 21:47
706 查看
因为最近算法实现过程中,随着算法变得复杂,运行中不必要部分耗时逐渐增加。通常来说,为了节约调试时间,会把已经运行正确的结果存储下来(指定文件夹),然后再运行程序时便可以直接读取中间项本地文件,大大节约不必要的重复计算时间。这里只对我最近比较常用的存储文件和读取的方法进行介绍,当然欢迎大家一起讨论新的方法。
首先,要弄清转储和读取的算法流程。
(1)加载本地指定文件名filename的文件file;
(2)如果加载失败(file为空),则跳转(3)否则跳转(4);
(3)计算生成指定file,并转储到本地指定路径filename;
(4)进入算法的下一步。
Matlab大致代码如下:
% Load file (or compute if fileis not found)
file = loadFile( options, shot );
if( isempty( file ) )
file = computeFile( options, shot );
end
其中loadFile函数的传参options记录存储路径和方法,shot记录当前处理文件的id,可用于处理多个同类计算问题的中间项存储。computeFile函数的传参同loadFile。
loadFile函数具体代码如下。其中比较技巧性的地方在于fullfile函数的使用,根据传参则可找到指定文件夹outfolder,子文件夹名为file,计算方法命名子子文件夹,最后找到当前文件。
function result = loadFile(options, range )
% file是文件的完全路径,options.outfolder是输出数据文件的文件夹路径,字符串格式;
% options.method是当前部分的算法名称,字符串格式;
% fileShot%i.mat是中间项的文件名
file = fullfile( options.outfolder, 'file',...
options.method, sprintf('fileShot%i.mat', range ) );
% 如果本地文件已存在,则直接加载load,没有则返回为空
if( exist( file, 'file' ) )
flow = load( file );
if( isfield( flow, 'input' ) )
result = flow.input;
elseif( isfield( flow, 'flow' ) )
result = flow.flow;
else
warning( '%s: no known fieldfound\n', file );
result = [];
end
else
warning( '%s not found\n', file );
result = [];
end
end
运行了loadFile函数之后,如果file还为空则说明本地不包含该中间项文件,则调用computeFile函数进行计算。
function file = computeFile(options, shot )
filefolder = fullfile( options.outfolder, 'file',...
options.method );
if( ~exist(filefolder, 'dir' ) )
mkdir( filefolder );
end
filename = fullfile( filefolder,...
sprintf( 'fileShot%i.mat', shot ) );
if( strcmp( options.filemethod, '自己的计算方法' ) )
file = computeFileMethod( ); % 自己的计算方法
else
error( 'Unknown file computationmethod' )
end
% 得到计算结果之后,保存在指定文件夹
save( filename, 'file', '-v7.3' );
end
以上就是比较耗时的算法过程中,对中间项进行文件存储并且读取的大致方法,最近用的很频繁的一段代码,也是从别处借鉴总结过来的,希望能给大家一些帮助!
首先,要弄清转储和读取的算法流程。
(1)加载本地指定文件名filename的文件file;
(2)如果加载失败(file为空),则跳转(3)否则跳转(4);
(3)计算生成指定file,并转储到本地指定路径filename;
(4)进入算法的下一步。
Matlab大致代码如下:
% Load file (or compute if fileis not found)
file = loadFile( options, shot );
if( isempty( file ) )
file = computeFile( options, shot );
end
其中loadFile函数的传参options记录存储路径和方法,shot记录当前处理文件的id,可用于处理多个同类计算问题的中间项存储。computeFile函数的传参同loadFile。
loadFile函数具体代码如下。其中比较技巧性的地方在于fullfile函数的使用,根据传参则可找到指定文件夹outfolder,子文件夹名为file,计算方法命名子子文件夹,最后找到当前文件。
function result = loadFile(options, range )
% file是文件的完全路径,options.outfolder是输出数据文件的文件夹路径,字符串格式;
% options.method是当前部分的算法名称,字符串格式;
% fileShot%i.mat是中间项的文件名
file = fullfile( options.outfolder, 'file',...
options.method, sprintf('fileShot%i.mat', range ) );
% 如果本地文件已存在,则直接加载load,没有则返回为空
if( exist( file, 'file' ) )
flow = load( file );
if( isfield( flow, 'input' ) )
result = flow.input;
elseif( isfield( flow, 'flow' ) )
result = flow.flow;
else
warning( '%s: no known fieldfound\n', file );
result = [];
end
else
warning( '%s not found\n', file );
result = [];
end
end
运行了loadFile函数之后,如果file还为空则说明本地不包含该中间项文件,则调用computeFile函数进行计算。
function file = computeFile(options, shot )
filefolder = fullfile( options.outfolder, 'file',...
options.method );
if( ~exist(filefolder, 'dir' ) )
mkdir( filefolder );
end
filename = fullfile( filefolder,...
sprintf( 'fileShot%i.mat', shot ) );
if( strcmp( options.filemethod, '自己的计算方法' ) )
file = computeFileMethod( ); % 自己的计算方法
else
error( 'Unknown file computationmethod' )
end
% 得到计算结果之后,保存在指定文件夹
save( filename, 'file', '-v7.3' );
end
以上就是比较耗时的算法过程中,对中间项进行文件存储并且读取的大致方法,最近用的很频繁的一段代码,也是从别处借鉴总结过来的,希望能给大家一些帮助!
相关文章推荐
- conv2函数(MATLAB)
- 使用LDA线性判别分析进行多类的训练分类
- LDA算法入门
- 图像卷积、相关以及在MATLAB中的操作
- matlab中.m文件的一种加密方法
- Matlab GUI 鼠标响应(三)
- Matlab GUI 鼠标事件(二)
- 功率谱密度相关方法的MATLAB实现
- Matlab GUI 鼠标事件(一)
- Matlab strsplit函数语法
- Matlab对文件目录路径的操作
- matlab打包dll
- Matlab中save函数
- 用美图秀秀(微软调色版)生成的R分量为255的图片在MATLAB和OpenCV中R分量为254
- 协方差矩阵
- 获得一定精确度的数据matlab
- 解决Field II以及CVX凸优化工具箱在MATLAB环境下Invalid MEX File Error
- 朴素贝叶斯--matlab自带工具箱的使用
- matlab---调用.exe文件,批量写入读入
- matlab中图像处理常见用法