performance - Mat 文件加载速度比 m 文件慢

标签 performance matlab load

我有一个大变量存储在一个 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 ...
    ] ;

最佳答案

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

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

关于performance - Mat 文件加载速度比 m 文件慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29631236/

相关文章:

javascript - 显示正在加载图像直到 div 完全加载

c - 尝试打开文件时出现段错误(核心已转储)

performance - Java 8流产生的代码是否比普通命令式循环慢?

sql - 如何在 SELECT (T-SQL) 中使用变量

matlab - Matlab 可以处理 USB 通信吗?

mysql - 记录 mysql 查询

performance - 关于如何对PEBS(基于精确事件的采样)计数器进行编程的良好资源?

performance - 如何在映射带有子 slice 的结构时降低时间复杂度?

matlab - 找到合适的陷波滤波器以从图像中去除图案

performance - 有没有更快/更紧凑的方法从方形中获取索引? (Matlab)