MATLAB中存储中间数据以避免重复计算
来源:互联网 发布:淘宝店铺为什么没访客 编辑:程序博客网 时间:2024/05/22 06:08
在做一个研究的初期一般都用matlab来试一试水,毕竟matlab开发算法原型还是比较快的,至少在图形领域是这样的,总之实验室学长都是这样做的。
然而图形领域一个比较头疼的问题就是运算时间。尤其是用了各种机器学习算法之后,数据量大,计算时间就特别长了。
而研究过程中常常需要各种测试,看效果,然后修改,这是常见的流程。此时问题产生了。刚开始的时候也许代码不多,运算时间也不长,不会有什么问题,然而代码长度不断增加,运算时间不断加成,每次测试将会消耗大量的时间重复改动部分之前的运算,然后才执行真正改动过的运算。这就造成了大量的浪费。
之前也尝试过不同的办法,比如每次保存workspace, 然后只需检测变量是否存在就行,如果存在就不再运算。但是时间一长容易混乱。后来试过将变量存成文件,然后检测文件是否存在,存在就读,然而也不太方便。
后来写了两个小函数,原理还是检测文件,存在就避免重复计算。只是这样显得方便快捷一些,并且稍稍封装一些有利于管理和使用。同样有利于修改,毕竟到每个载入文件的地方都修改源代码是件比较麻烦的事情,相比之下,仅仅修改接口实现就方便得多。
主要用到三个函数,用于生成对应变量的名字,存变量和读取变量。
util_varname.m
function [ fname ] = util_varname( varname )% this function will generate a file name for a variable% The file name should be name of var and a prefixfname = sprintf('preData/data_%s.mat',varname);end
util_save.m
function util_save( var,name )%UTIL_SAVE Summary of this function goes here% Detailed explanation goes heres = struct;s = setfield(s, name,var);save(util_varname(name),'-struct', 's');end
util_load.m
function [ ret,succ ] = util_load( varname )% this util function will load a variable% from file, set succ if success% the two function, util_save and util_laod should% be used together if(exist(util_varname(varname),'file')) ret = load(util_varname(varname) , varname); ret = struct2cell(ret); ret = ret{1}; succ = true; else ret = []; succ = false; endend
这样,需要避免重复计算的变量可以这样得到,加入需要计算的是 val, 那么代码可以这样
[val ,succ] = util_load('val');if(succ == false) % add code to calculate val here ... % save val util_save(fern,'fern');end
只需稍稍修改原来的代码就可以在下次修改的时候避免重复运算。这样可以节省很多很多的时间。当改动之前的运算需要运行数分钟时,存储数据的确时很必须的。
当需要重新计算的时候也很方便,删掉已有的数据文件, 然后重新运行就可以了,不过为了保持数据之间的一致性,还必须同时删掉依赖于被重新计算的变量的变量对应的数据文件。这个问题暂时还没有解决。
- MATLAB中存储中间数据以避免重复计算
- 将数据临时存储起来,避免重复计算
- 避免重复插入数据
- 避免递归中的重复计算
- [Java]集合中数据排序与避免重复
- Matlab中存储及读取数据
- Matlab中数据的存储方式
- oracle 避免重复插入数据
- mysql 避免重复插入数据
- sqlite避免重复插入数据
- matlab repmat 重复数据
- dp 01背包避免重复计算
- Matlab中存储figure窗口中的图像时如何避免带入白色边界
- 王立平--往sdcard中以流的形式存储数据
- numpy中以文本的方式存储以及读取数据
- redis中以层级关系、目录形式存储数据
- 关于list中存储map数据重复问题
- sql通过触发器避免导入重复数据
- Box2d跳跃等运动。。
- Yii 框架创建自己的 web 应用
- 分页的封装工具类
- 约瑟夫环问题
- 杭电1019
- MATLAB中存储中间数据以避免重复计算
- 配置文件读取
- 本博客LeetCode题解索引及各类算法问题小结汇总(C++实现)
- Spring Boot 集成Swagger
- python爬虫介绍
- 欢迎使用CSDN-markdown编辑器
- malloc、calloc、realloc的区别
- 八个小技巧教你做出舒服的MG动画
- POJ 3041 Asteroids 匈牙利算法模板题