尽量使用Matlab的save -v6

系列:编程和算法效率
查看该系列所有文章

上次说起遇到两个Matlab的效率问题,还剩下save,load没说。不过这个问题的结论挺简单的,就是在save的时候尽量指定使用-v6选项。

1.save, load函数的基本情况

有几种情况需要用到save、load

  1. 如果过程中数据量太大,不能全部保留在内存中,只能通过save、load的方式分块处理。
  2. 用来保存计算结果,以备下次使用。

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。请参考右边的相关文章列表。


  1. 在Preference可以修改默认设置,但这个设置不随程序走,最好还是直接在程序里面直接指定。

  • 支持使用微薄、人人网和QQ的账户登陆进行评论。由各自网站直接认证,不会泄露你的密码。
  • 登陆后可选择分享评论到所绑定的社交网络,如微薄、人人和QQ空间。
  • 评论提交后无法修改。如需修改,请删除原评论再重新提交。
  • 评论支持LaTeX代码,行内公式请用\(a+b=c\),行间公式请用\[a+b=c\]。公式只支持英文字符。
Loading...
Loading...
Loading...