【问题标题】:Mat file loads slower than m-fileMat 文件加载速度比 m 文件慢
【发布时间】:2015-04-14 15:21:21
【问题描述】:

我有一个大变量存储在一个 mat 文件和一个 .m 文件中。 数据只是一个大单元格:

Tensor{1,1,1,1,1,1,1,1,1,1,1,1}=[1,1,2,2,1, (... )];

Tensor{1,1,1,1,1,1,1,1,1,1,1,2}=[1,1,2,2,3, (... )];

(...)

为什么从 mat 文件加载变量比从 m 文件加载慢得多?

tic;load('Tensor.mat');toc
Elapsed time is 6.969654 seconds.

tic;Tensor;toc
Elapsed time is 0.152476 seconds.

有没有办法将变量保存为 m 文件?

@Daniel 一个典型的条目示例是:

Tensor{2,2,2,2,2,4,4,4,4,4,4,4} = [ ...
    0,0,0,0,0,(1 / 6) .* 22 .^ (-1 / 2),0,0,0,0,0,0,0 ; ...
    0,0,0,0,(1 / 6) .* ( 5 / 33) .^ (1 / 2),0,(-1 / 12) .* (7 / 11) .^ (1 / 2),0,0,0,0,0,0 ; ...
    0,0,0, (1 / 11) .* (5 / 6) .^ (1 / 2),0,(-35 / 132) .* 3 .^ (-1 / 2),0,(7 / 44) .* 3 .^ (-1 / 2),0,0,0,0,0; ...
    0,0,(1 / 11) .* (5 / 6) .^ (1 / 2),0,(-7 / 33),0,(1 / 44) .* 105 .^ (1 / 2),0,(-7 / 66),0,0,0,0; ...
    0,(1 / 6) .* (5 / 33) .^ (1 / 2),0,(-7 / 33),0,(7 / 33) .* (5 / 2) .^ (1 / 2),0,(-35 / 198) .* (5 / 2) .^ (1 / 2),0,(7 / 66),0,0,0; ...
    (1 / 6) .* 22 .^ (-1 / 2),0,(-35 / 132) .* 3 .^ (-1 / 2),0,(7 / 33) .* (5 / 2) .^ (1 / 2),0,(-25 / 66) .* (7 / 6) .^ (1 / 2),0,(35 / 198) .* (5 / 2) .^ (1 / 2),0,(-7 / 44) .* 3 .^ (-1 / 2),0,0; ...
    0,(-1 / 12) .* (7 / 11) .^ (1 / 2),0,(1 / 44) .* 105 .^ (1 / 2),0,(-25 / 66) .* (7 / 6) .^ (1 / 2),0,(25 / 66) .* (7 / 6) .^ (1 / 2),0,(-1 / 44) .* 105 .^ (1 / 2),0,(1 / 12) .* (7 / 11) .^ (1 / 2),0; ...
    0,0,(7 / 44) .* 3 .^ (-1 / 2),0,(-35 / 198) .* (5 / 2) .^ (1 / 2) ,0,(25 / 66) .* (7 / 6) .^ (1 / 2),0,(-7 / 33) .* (5 / 2) .^ (1 / 2),0,( 35 / 132) .* 3 .^ (-1 / 2),0,(-1 / 6) .* 22 .^ (-1 / 2); ...
    0,0,0,(-7 / 66), 0,(35 / 198) .* (5 / 2) .^ (1 / 2),0,(-7 / 33) .* (5 / 2) .^ (1 / 2),0,( 7 / 33),0,(-1 / 6) .* (5 / 33) .^ (1 / 2),0; ...
    0,0,0,0,(7 / 66),0,(-1 / 44) .* 105 .^ (1 / 2),0,(7 / 33),0,(-1 / 11) .* (5 / 6) .^ (1 / 2),0,0; ...
    0,0,0,0,0,(-7 / 44) .* 3 .^ (-1 / 2),0,(35 / 132) .* 3 .^ (-1 / 2),0,(-1 / 11) .* (5 / 6) .^ (1 / 2),0,0,0; ...
    0,0,0,0,0,0,(1 / 12) .* (7 / 11) .^ (1 / 2),0,(-1 / 6) .* (5 / 33) .^ (1 / 2),0,0,0,0; ...
    0,0,0,0,0,0,0,(-1 / 6) .* 22 .^ (-1 / 2),0,0,0,0,0 ...
    ] ;

【问题讨论】:

  • 小心标签! mmat与Matlab无关;查看他们的描述
  • .mat 文件是用什么版本保存的?如果它们比 6 更新,它们会被压缩,并且在将它们加载到工作区时可能需要更多时间来解压缩它们。检查here 获取信息。要检查版本,请在命令行窗口中写入:type('YourMatFile.mat')
  • 版本为 MATLAB 5.0 MAT 文件,平台:GLNXA64。如果我尝试将其保存为不同的版本,例如使用 -v7 命令。
  • 您是通过网络加载文件 - 还是本地磁盘? (.m 文件的同样问题
  • 它们都保存在本地。

标签: performance matlab load


【解决方案1】:

这是因为 .mat 文件是一个二进制文件,需要一些处理来提取变量,而 .m 文件只是一个文本文件。将数据保存在 .dat 文件中比 .m 文件更方便。结果应该差不多。可以尝试以下两个命令来检查:

tic;load('Tensor.mat');toc
tic;load('Tensor.dat','-ascii');toc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2012-08-05
    • 2014-09-17
    相关资源
    最近更新 更多