Matlab中加载数据最快的方法是啥

Posted

技术标签:

【中文标题】Matlab中加载数据最快的方法是啥【英文标题】:What is the fastest way to load data in MatlabMatlab中加载数据最快的方法是什么 【发布时间】:2011-06-16 10:05:10 【问题描述】:

我有大量数据 (>800Mb) 需要很长时间才能加载到 Matlab 中,主要是因为它被分成每个

我正在考虑读取数据并将其写入某种二进制文件,这样可以更快地进行后续读取(其中可能有很多,因此我需要加快速度)。

那么,我的问题是,将它们写入磁盘以尽可能快地再次读取它们的最佳格式是什么?

我想我可以选择使用 fwrite 编写,或者只是从 matlab 中保存变量。我想我更喜欢 fwrite 选项,所以如果需要,我可以从另一种包/语言中读取它们...

【问题讨论】:

【参考方案1】:

当我像这样使用“-v6”选项保存 .mat 文件时,我的加载速度得到了惊人的提升:

save(matlabTrainingFile, 'Xtrain', 'ytrain', '-v6'); 

这是我在测试中使用的矩阵的大小...

Attr Name                   Size                     Bytes  Class
==== ====                   ====                     =====  ===== 
  g  Xtest               1430x4000                45760000  double
  g  Xtrain              3411x4000               109152000  double
  g  Xval                1370x4000                43840000  double
  g  ytest               1430x1                      11440  double
  g  ytrain              3411x1                      27288  double
  g  yval                1370x1                      10960  double

...以及我们实现的性能改进:

改动前:

time to load the training data: 78 SECONDS!!! 
time to load validation data:   32
time to load the test data:     35

改动后:

time to load the training data: 0 SECONDS!!!
time to load validation data:   0
time to load the test data:     0

显然,它之所以如此有效,是因为旧版本 6 使用的压缩比新版本少。 所以你的文件会更大,但加载速度会更快。

【讨论】:

【参考方案2】:

查看HDF5 数据格式,最新版本的 MATLAB 将其用作 .mat 文件的基础格式。您可以使用hdf5write 函数手动创建自己的 HDF5 文件,并且可以从任何具有 HDF 绑定的语言访问此文件(大多数常见语言都可以,或者至少提供一种集成可以调用 HDF5 库的 C 代码的方法)。

如果您的数据是数字数据(并且数据类型相同),您可能会发现很难超越普通二进制 (fwrite) 的性能。

【讨论】:

对我来说,看起来 HDF5 格式胜出,它似乎比 save() 快 2 到 10 倍,并且加载 50Mb 文件的性能相似 您可能将未压缩的 HDF5 与 save 命令使用的 gzip 压缩的 HDF5 进行了比较。您可以尝试savefast,它基本上是 HDF5 函数的包装器,其行为类似于未压缩的 save 命令。【参考方案3】:

二进制 mat 文件是最快的。只需使用

save myfile.mat <var_a> <var_b> ...

【讨论】:

是的,我想可能是这样。是否有在 Matlab 之外读取 mat 文件的选项?

以上是关于Matlab中加载数据最快的方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

从 8000 个项目列表中加载 NSComboBox 的最快方法

在数据块中加载增量表特定分区的最佳实践是啥?

在 PyTorch 中加载迁移学习模型进行推理的正确方法是啥?

如何将opencv Mat矩阵保存到可以在Matlab中加载的文件中

如何在 MATLAB 中加载大文件(~150MB)?

使用 Firestore 在 Flutter 中加载配置文件数据的最佳方式是啥?