加速从文件加载结构。

18次浏览(过去30天)
米切尔•蒂尔曼
米切尔•蒂尔曼 2021年8月27日
你好,
我正在寻找一种方法来加快保存和加载~8GB的数据。目前,它都包含在一个结构中。该结构的格式类似于下面的代码——在结构的每一层都有一些元数据,这里没有显示出来。
subNum = 1:10;% 10受试者
trialNum = 1:50;每个受试者50次试验
dataStreamNum = 1:50;每个主题50个数据流
dataMatrix =兰德(3000);每个数据流为3x3000
structName.Subject (subNum) .Trial (trialNum) . data (dataStreamNum) .Matrix = dataMatrix;%矩阵形式的数据
结束
结束
结束
我调查了 matfile 能够加载结构的一部分,但发现matfile不允许访问特定的字段。 这篇文章 这让我开始考虑将每个试验拆分到单独的.mat文件中(在本例中,将有500个.mat文件,每个文件都是一个较小的结构体)。我总共有两个问题:
  1. 是否有matfile的替代方案,允许我一次只加载一个试验,从一个8GB的结构,如:
structName.Subject (4) .Trial (15);
2.如果没有这样的替代方案,如果我在500个.mat文件上使用load()命令(一次一个文件)(总共8GB的数据),会明显比在1个8GB的.mat文件上使用load()慢还是快?
谢谢你!
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年8月28日
对于超过2 GB的文件,要保存为.mat文件,您必须使用-v7.3标志,这将导致写入以HDF5格式完成。HDF5格式对于struct数组来说不是那么有效;它或多或少要求每个数组成员存储为子数据集,然后在内部将结构数组作为子数据集引用的数组。
正因为如此,您可能想要试验一下,看看您可以使用NetCDF 3—3.6和更高版本的大文件支持来做什么。金宝app但要注意NetCDF 4是HDF5下面…

登录评论。

答案(1)

Chunru
Chunru 2021年8月28日
看起来你的数据很有规律。而不是使用struct,你可以简单地使用N-D数值数组,这是更快和更有效的。使用matfile,您可以轻松地获得一小部分数据。
% for subNum=1:10;% 10受试者
% for trialNum=1:50;每个受试者50次试验
% for dataStreamNum=1:50;每个主题50个数据流
% dataMatrix =兰德(3000);每个数据流为3x3000
% structName.Subject (subNum) .Trial (trialNum) . data (dataStreamNum) .Matrix = dataMatrix;%矩阵形式的数据
%结束
%结束
%结束
数据(3,3000,50,50,10);
1评论
米切尔•蒂尔曼
米切尔•蒂尔曼 2021年8月28日
谢谢你的建议,但我确实需要结构格式。这只是我的数据格式的一个粗略的轮廓。数据流的长度实际上有很大差异,每次试验的数据流数量和每个受试者的试验数量也有很大差异。由于这个原因,也因为我有很多相关的元数据,所以我需要结构格式。

登录评论。

下载188bet金宝搏


释放

R2020b

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!