尽量使用 Matlab 的 save -v6

作者: , 共 1055 字 , 共阅读 0

上次说起遇到两个 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.

类似文章:
最近用 Matlab 写了个东西,运行效率不如我意。用 Profiler 跟踪了一下,结果让我大吃一惊。其中三分之一的时间花费在 datestr 这个函数上,六分之一的时间花费在 save 和 load 数据上。这里先谈前一个问题,关于 save 和 load 的效率以后再谈。
相似度: 0.146
最近写了一些 Matlab 程序,想起以前想过的一个东西,记录一下。
上次大规模使用 Matlab 还是本科的时候,当时还是 5.3 版,现在重新尝试它,已经是 7.8 ( R2009a ),而且 R2010b 版都已经发售。而这些版本引入的一个新玩意儿便是面向对象化编程( object-oriented programming , OOP )。
没有人敢说 Matlab 的帮助文件不够详细和全面,但 Matlab 里面的确存在一些功能和函数,你很难找到它的帮助文档。下面列举一些,以后碰到其它的也会放到这里来:
编程 » Matlab
在写 Matlab 程序时,函数的命名方式让人头疼,很难保证刚写的一个函数名在很久以前被用过,成为隐藏的一颗炸弹。
本文结论:不要过度担心 Matlab 的传值调用的效率问题。
现在相机的像素实在是太高了,上次去泰山玩,朋友的 1200 万像素的 D90 照出来的照片分辨率高达 4288×2848 ,即使转为 jpg 格式,每张都在 5M 以上。而现在电脑屏幕的分辨率最高也在 1920 以下吧,超高分辨率的照片除了打印大照片之外没什么用处,反而不方便传输、流通、保存。
编程 » Matlab
Matlab 在启动时会自动运行脚本startup.m。在这个脚本里可以自动修改当前目录,修改显示方式等等。比如
编程 » Python
imp.load_source在动态载入 python 模块时非常有用,但需要注意其特性。
bootstrap 是一个前端库,做一些常见的布局和效果,能省掉至少 95%的功夫。最近直接从 v4 升级到 v5 ,发现网页有些布局就乱掉了。这里是调整笔记。
编程 » vbs, 办公自动化
工作中或多或少有些琐碎的事情,比如每天要发送和接受数据,很多是通过邮件的方式传递的。之前写过如何在 Outlook 里自动保存附件,这里再发一个如何更方便地发送带附件的邮件。
没有人敢说 Matlab 的帮助文件不够详细和全面,但 Matlab 里面的确存在一些功能和函数,你很难找到它的帮助文档。下面列举一些,以后碰到其它的也会放到这里来: