读取大量.h5数据集

时间:2018-10-24 18:43:37

标签: matlab

我正在使用这些h5文件,这些文件有成千上万个数据集,其中包含数值向量并且大小均相同。我的目标是读取数据集并从这些向量创建一个大矩阵。数据集从“ 0”到“ xxxxx”(相当大的数目)命名,我能够读取它们并获取矩阵,但这样做需要花费很多时间。我想知道您是否可以看一下我的代码并提出一种使它运行更快的方法 这就是我现在的做法

t =[];
for i = 0:40400 % there are 40401 datasets in this particular file
   j =  int2str(i); 
   p = '/mesh/';  % The parent group
   s = strcat(p,j);  % to create the full path of a dataset e.g. '/mesh/0'
   r = h5read('temp.h5',s);  % the file name is temp and s has the dataset path  
   t = [t;r];
end  

在这种情况下,有40401个数据集,每个数据集都有80802x1的数值向量。因此,最终我想创建80802x40401矩阵。此代码需要一天的时间才能完成。我认为它之所以很慢是原因之一,因为在每次迭代中,matlab都会访问h5文件。如果您中的某些人有一些加快代码的提示

,我将不胜感激

1 个答案:

答案 0 :(得分:0)

当我在编辑器中复制代码时,在t下出现红色波浪号,并显示警告:

  

变量t似乎在每次循环迭代中都会更改大小。考虑预先分配速度。

speed

您应该在开始循环之前使用函数zeros分配t的最终内存:

t = zeros(80804,40401);

您还应该阅读以下内容:Programming Patterns: Maximizing Code Performance by Optimizing Memory Access

  • 在循环内访问数组之前对其进行预分配
  • 在列中存储和访问数据
  • 避免创建不必要的变量

也许p = '/mesh/';在循环内没有用,并且可以在循环外完成,因为它不会改变。最好没有p而直接做s = strcat('/mesh/',j);