save/load Octave 中的 4 维数组的最佳方法

Best way to save/load 4-dimensional array in Octave

我有一个 Octave 代码,它从数千个 .csv 文件中收集数据并将其存储在一个 4 维矩阵 (800x8x80x213) 中,因此我可以使用其他代码访问它。读取数据的过程大约需要 10 分钟,所以我认为保存矩阵是个好主意,然后我可以在需要处理数据时将其加载到工作区中,而不是等待 10 分钟让矩阵完成被创建。我使用 Save 保存矩阵并使用 Load 将其加载到工作区中,但是当我加载矩阵时,需要 30 分钟才能完成。是否有 better/faster 方法来 save/load 这个 4-D 矩阵?加载矩阵的时间比从 4000 多个文件创建矩阵的时间长 3 倍,这似乎很荒谬...

save 命令使用的默认 'format' 选项是 -text,这是人类可读的。对于大型数据集,这将需要很长时间来创建(更不用说,它会导致更大的文件,因为它需要通过文本表示来表示浮点数......),所以它确实不适合这种数据。出于同样的原因,从大型文本格式文件加载也将花费相当长的时间,尤其是在速度较慢的计算机上。

Octave 还支持 -binary 选项,这是 Octave 的内部二进制格式。这就是你所需要的。例如

save -binary outputfile.bin varname

在这种特殊情况下,文本文件为 2.2G,而二进制格式为预期的 872Mb(即元素数 * 每个元素 8 字节)。保存和加载几乎是即时的。

或者,还有很多其他选项,对应于其他常见格式,例如正如评论者在这里也提到的,-hdf5,或 -v7,这是 matlab 的 .mat 格式。

在您的 Octave 控制台上键入 help save 以获取更多详细信息。