尽量使用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.

类似文章:
没有人敢说 Matlab 的帮助文件不够详细和全面,但 Matlab 里面的确存在一些功能和函数,你很难找到它的帮助文档。下面列举一些,以后碰到其它的也会放到这里来:
最近用 Matlab 写了个东西,运行效率不如我意。用 Profiler 跟踪了一下,结果让我大吃一惊。其中三分之一的时间花费在 datestr 这个函数上,六分之一的时间花费在 save 和 load 数据上。这里先谈前一个问题,关于 save 和 load 的效率以后再谈。
本文结论: 不要过度担心 Matlab 的传值调用的效率问题。
最近写了一些 Matlab 程序,想起以前想过的一个东西,记录一下。
以下对并行计算的个人理解受到较多质疑,删除之。
编程 » vbs, 办公自动化
工作中或多或少有些琐碎的事情,比如每天要发送和接受数据,很多是通过邮件的方式传递的。之前写过 如何在 Outlook 里自动保存附件 ,这里再发一个如何更方便地发送带附件的邮件。
没有人敢说 Matlab 的帮助文件不够详细和全面,但 Matlab 里面的确存在一些功能和函数,你很难找到它的帮助文档。下面列举一些,以后碰到其它的也会放到这里来: