在Octave

时间:2015-12-14 11:45:42

标签: matlab optimization matrix save octave

我正在使用Octave中的大型pointcloud数据(不同的文件范围从[10 ^ 5到10 ^ 7,4]元素),我正在寻找优化代码的方法。

现在我正在尝试将数据保存到.mat文件中,因为我已在某处读取(确认需要)从.mat文件加载比加载实际文件要快得多每次都是data.txt文件。

save -ascii myfile data有很好的需求,因为它只是我想存储的数字值,但是

load('myfile.mat')显示包含所有值的1x1矩阵,而不是具有nx4矩阵,这很奇怪,因为当我使用load('data.txt')时,我得到一个完整的nx4矩阵。

问题似乎与save语法有关。我可以保存文件的任何方式,以便我可以加载原始尺寸?或者我是否必须以某种方式操纵生成的1x1变量?

奖金问题:
浏览一些答案我觉得使用转置矩阵而不是nx4会大大改善运行时间。真的吗?

1 个答案:

答案 0 :(得分:4)

如果速度很重要,请使用二进制格式。低于一点速度比较

a = rand (1e6, 4);
fn = tmpnam;

tic; save ("-ascii", fn, "a"); toc;
tic; load ("-ascii", fn); toc;
stat (fn).size

tic; save ("-v7", fn, "a"); toc;
tic; load ("-v7", fn); toc;
stat (fn).size

tic; save ("-v6", fn, "a"); toc;
tic; load ("-v6", fn); toc;
stat (fn).size

tic; save ("-binary", fn, "a"); toc;
tic; load ("-binary", fn); toc;
stat (fn).size

给出了

Elapsed time is 2.82237 seconds.
Elapsed time is 6.28686 seconds.
ans =  61000000
Elapsed time is 1.54074 seconds.
Elapsed time is 0.252718 seconds.
ans =  30192558
Elapsed time is 0.030833 seconds.
Elapsed time is 0.047183 seconds.
ans =  32000184
Elapsed time is 0.116342 seconds.
Elapsed time is 0.0523431 seconds.
ans =  32000045

正如你所看到的,-v6比-ascii

快得多

编辑:还要记住“-ascii”只使用单精度浮点数