首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取大量.h5数据集

读取大量.h5数据集
EN

Stack Overflow用户
提问于 2018-10-25 02:43:37
回答 1查看 89关注 0票数 0

我正在处理这些h5文件,这些文件有数以万计的数据集,其中包含数值的向量和所有相同大小的向量。我的目标是读取数据集,并从这些向量中创建一个大型矩阵。数据集的名称从"0“到"xxxxx”(一些大数字)我能够读取它们并获得矩阵,但这需要永远这样做。我想知道你是否可以看一下我的代码,并提出一个让它运行得更快的方法这里是我现在如何做的

代码语言:javascript
复制
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文件。如果你们中的一些人有一些加速代码的技巧,我将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-10-25 16:39:13

当我在编辑器中复制你的代码时,我得到了t下面的红色波浪号,并显示了警告:

变量t似乎在每次循环迭代时改变大小。考虑为速度进行预分配。

在开始循环之前,应该使用函数zeros分配t的最后一个内存

代码语言:javascript
复制
t = zeros(80804,40401);

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

在loops

  • Store中访问阵列之前先使用
  • Preallocate阵列,并在columns
  • Avoid中访问数据,从而创建不必要的variables

也许p = '/mesh/';在循环内是无用的,可以在循环外完成,因为它不会改变。如果不使用p而直接使用s = strcat('/mesh/',j);,那可能会更好

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52975957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档