我正在处理这些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文件。如果你们中的一些人有一些加速代码的技巧,我将不胜感激。
发布于 2018-10-25 16:39:13
当我在编辑器中复制你的代码时,我得到了t下面的红色波浪号,并显示了警告:
变量
t似乎在每次循环迭代时改变大小。考虑为速度进行预分配。

在开始循环之前,应该使用函数zeros分配t的最后一个内存
t = zeros(80804,40401);您还应该阅读以下内容:Programming Patterns: Maximizing Code Performance by Optimizing Memory Access
在loops
也许p = '/mesh/';在循环内是无用的,可以在循环外完成,因为它不会改变。如果不使用p而直接使用s = strcat('/mesh/',j);,那可能会更好
https://stackoverflow.com/questions/52975957
复制相似问题