gpt4 book ai didi

matlab - 在 Octave 中保存/加载大型矩阵

转载 作者:行者123 更新时间:2023-12-02 21:09:34 26 4
gpt4 key购买 nike

我正在 Octave 中处理大型点云数据(从 [10^5 到 10^7, 4] 元素的不同文件),并且我正在寻找优化代码的方法。

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

save -ascii myfile data 可以很好地满足需要,因为它只是我想存储的数值,但是

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

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

额外问题:
浏览一些答案,我有点感觉使用转置矩阵而不是 nx4 会大大提高运行时间。真的吗?

最佳答案

如果速度很重要,请使用二进制格式。下面有点速度对比

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”仅使用单精度 float

关于matlab - 在 Octave 中保存/加载大型矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34266256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com