gpt4 book ai didi

python - 从 hdf5 加载组

转载 作者:行者123 更新时间:2023-12-01 00:05:50 25 4
gpt4 key购买 nike

我有一个 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 文件,我都有一个时间振幅的数据集。 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_Ximpact_Y 等中,因为它们代表特定 XY 位置的数据。

我需要从每个或仅一对(时间、幅度)(可配置)创建绘图。我还需要将振幅与“黄金”数组进行比较,以查看差异并计算其他内容。为了执行计算,我将读取所有数据集,执行计算并保存结果。

每个测试用例我有超过 200k .csv 文件,总共超过 5M。在这种情况下,使用 5M 磁盘读取将需要相当长的时间。对于 200k 个文件,通过将所有 .csv 导出到唯一的 JSON 文件,执行需要约 40 秒,使用 .csv 需要约 4 分钟。由于加载单个 JSON 文件时出现内存问题,我无法再使用唯一的 json。这就是我选择 hdf5 作为替代方案的原因。

编辑2:

我如何读取 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

最佳答案

不,没有一个函数可以同时读取多个组或数据集。您必须自己从读取一组或数据集的较低级别函数中创建它。

您能给我们提供一些进一步的背景信息吗?它是什么类型的数据以及您想如何处理它? (你想进行统计吗?绘制图表?等等。)你最终想要实现什么目标?这或许可以帮助我们避免经典XY problem

在您的 earlier question 中你说你将很多小的 CSV 文件转换成一个大的 HDF 文件。你能告诉我们为什么吗?有很多 CSV 小文件有什么问题?

根据我的经验,包含大量组和数据集的 HDF 文件相当慢,正如您现在所经历的那样。拥有相对较少但较大的数据集是否更好?您是否有可能以某种方式将多个数据集合并为一个?如果没有,HDF 可能不是解决您问题的最佳解决方案。

关于python - 从 hdf5 加载组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59990485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com