我有一个hdf5文件,其中包含组内的数据集。例:
group1/dataset1
group1/dataset2
group1/datasetX
group2/dataset1
group2/dataset2
group2/datasetX
我能够独立读取每个数据集。这就是我从.hdf5文件读取数据集的方式:
def hdf5_load_dataset(hdf5_filename, dsetname):
with h5py.File(hdf5_filename, 'r') as f:
dset = f[dsetname]
return dset[...]
# pseudo-code of how I call the hdf5_load_dataset() function
group = {'group1':'dataset1', 'group1':'dataset2' ...}
for group in groups:
for dataset in groups[group]:
dset_value = hdf5_load_dataset_value(path_hdf5_file, f'{group}/{dataset}')
# do stuff
我想知道是否有可能将group1的所有数据集,然后group2的所有数据集以字典或类似形式加载到单个文件中。我的脚本花费了相当多的时间(4分钟)来读取约200k数据集。有2k个群组和100个数据集。因此,如果我立即将一个组加载到内存中,它将不会使它过载,并且会提高速度。
这是我正在寻找的伪代码:
for group in groups:
dset_group_as_dict = hdf5_load_group(path_hdf5_file, f'{group}')
for dataset in dset_group_as_dict;
#do stuff
在每个.csv文件中:
time, amplitude
1.000e-08, -1.432e-07
1.001e-08, 7.992e-07
1.003e-08, -1.838e-05
1.003e-08, 2.521e-05
对于每个文件夹中的每个.csv文件,我都有一个针对time
和的数据集amplitude
。hdfile的结构如下:
XY_1/impact_X/time
XY_1/impact_Y/amplitude
哪里
time = np.array([1.000e-08, 1.001e-08, 1.003e-08, ...]) # 500 items
amplitude = np.array([-1.432e-07, 7.992e-07, -1.838e-05, ...]) # 500 items
XY_1
在太空中的位置。
impact_X
表示X
在位置XY_1上受到了影响,因此X
振幅已更改。
所以,XY_1
必须在不同的基团的XY_2
,以及impact_X
,impact_Y
等等,因为它们代表数据到特定的XY位置。
我需要从每对或仅一对(时间,幅度)对(可配置)创建图。我还需要将幅度与“黄金”数组进行比较,以查看差异并计算其他内容。为了执行计算,我将读取所有数据集,执行计算并保存结果。
对于每个测试用例,我有超过200k .csv文件,总计超过5M。在这种情况下,使用从磁盘读取5M会花费很多时间。对于200k文件,通过将所有.csv导出到唯一的JSON文件,执行大约需要40s,而使用.csv需要大约4min。加载单个JSON文件时,由于内存问题,我无法再使用唯一的json。这就是为什么我选择hdf5作为替代。
我如何读取csv文件:
def read_csv_return_list_of_rows(csv_file, _delimiter):
csv_file_list = list()
with open(csv_file, 'r') as f_read:
csv_reader = csv.reader(f_read, delimiter = _delimiter)
for row in csv_reader:
csv_file_list.append(row)
return csv_file_list
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句