尽量使用Matlab的save -v6
上次说起遇到两个Matlab的效率问题,还剩下save,load没说。不过这个问题的结论挺简单的,就是在save的时候尽量指定使用-v6选项。
1.save, load函数的基本情况
有几种情况需要用到save、load
- 如果过程中数据量太大,不能全部保留在内存中,只能通过save、load的方式分块处理。
- 用来保存计算结果,以备下次使用。
save的选项(由save函数的最后一个参数控制,省略时使用默认值)
- -v7.3:支持超过2G的保存文件。
- -v7.0:支持数据压缩。
- -v6:在-v4的基础上,还支持多维矩阵、cell和结构数组。
- -v4:可保存二维实数、字符型矩阵和稀疏矩阵
一般默认选项为-v7。
2.尽量使用-v6选项
关于-v6和默认-v7的速度可参见下面的例子:
clear all
a.b = rand(1000, 1000);
a.c = a;
>> tic; for i = 1:10, save('A.mat', 'a'); end; toc
Elapsed time is 6.877207 seconds.
>> tic; for i = 1:10, load('A.mat'); end; toc
Elapsed time is 1.244955 seconds.
>> tic; for i = 1:10, save('A.mat', 'a', '-v6'); end; toc
Elapsed time is 3.415954 seconds.
>> tic; for i = 1:10, load('A.mat'); end; toc
Elapsed time is 0.174211 seconds.
从此处可见,使用-v6选项的save比默认-v7的速度要快1倍;在load时节约的时间更多,导入v6型的mat文件比v7型文件要快7倍。
那使用-v4的速度是不是更快呢?测试发现没有明显区别。而且-v6比-v4支持的数据类型要多得多,所以推荐全部使用-v6。
当然-v7选项并不是没有好处的,使用v7选项得到的mat文件要小一些,不过现在硬盘这么便宜,在大数据量的处理中还是速度更重要一些。
Q.E.D., ©zhiqiang, 2010.12.29。请参考右边的相关文章列表。
可以修改默认设置吗
在Preference可以修改默认设置,但这个设置不随程序走,最好还是直接在程序里面直接指定。