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 中加载迁移学习模型进行推理的正确方法是啥?