当前位置: 首页 > 面试题库 >

如何使用h5py将数据附加到hdf5文件中的一个特定数据集

寇坚成
2023-03-14
问题内容

我正在寻找一种.h5使用Python(h5py)将数据附加到文件内现有数据集的可能性。

我的项目的简短介绍:我尝试使用医学图像数据训练CNN。由于在将数据转换为NumPy数组的过程中大量数据和大量内存的使用,我需要将“转换”拆分为几个数据块:加载和预处理前100张医学图像,并将NumPy数组保存到hdf5文件,然后加载接下来的100个数据集并追加现有.h5文件,依此类推。

现在,我尝试存储前100个转换的NumPy数组,如下所示:

import h5py
from LoadIPV import LoadIPV

X_train_data, Y_train_data, X_test_data, Y_test_data = LoadIPV()

with h5py.File('.\PreprocessedData.h5', 'w') as hf:
    hf.create_dataset("X_train", data=X_train_data, maxshape=(None, 512, 512, 9))
    hf.create_dataset("X_test", data=X_test_data, maxshape=(None, 512, 512, 9))
    hf.create_dataset("Y_train", data=Y_train_data, maxshape=(None, 512, 512, 1))
    hf.create_dataset("Y_test", data=Y_test_data, maxshape=(None, 512, 512, 1))

可以看出,将转换后的NumPy数组分为四个不同的“组”,这些“组”存储在四个hdf5数据集中[X_train, X_test, Y_train, Y_test]。该LoadIPV()功能执行医学图像数据的预处理。

我的问题是,我想将接下来的100个NumPy数组存储到同一.h5文件中到现有的数据集中:这意味着我想例如将具有接下来的100个NumPy数组的现有X_train形状数据集附加到以下内容中[100, 512, 512, 9]X_train变成形状[200, 512, 512, 9]。其他三个数据集也应如此X_testY_train并且Y_test


问题答案:

我找到了一种似乎可行的解决方案!

看一下:用h5py增量写入hdf5!

为了将数据附加到特定数据集,必须首先在相应的轴上调整特定数据集的大小,然后在“旧” nparray的末尾附加新数据。

因此,解决方案如下所示:

with h5py.File('.\PreprocessedData.h5', 'a') as hf:
    hf["X_train"].resize((hf["X_train"].shape[0] + X_train_data.shape[0]), axis = 0)
    hf["X_train"][-X_train_data.shape[0]:] = X_train_data

    hf["X_test"].resize((hf["X_test"].shape[0] + X_test_data.shape[0]), axis = 0)
    hf["X_test"][-X_test_data.shape[0]:] = X_test_data

    hf["Y_train"].resize((hf["Y_train"].shape[0] + Y_train_data.shape[0]), axis = 0)
    hf["Y_train"][-Y_train_data.shape[0]:] = Y_train_data

    hf["Y_test"].resize((hf["Y_test"].shape[0] + Y_test_data.shape[0]), axis = 0)
    hf["Y_test"][-Y_test_data.shape[0]:] = Y_test_data

但是,请注意,您应该使用创建数据集maxshape=(None,),例如

h5f.create_dataset('X_train', data=orig_data, compression="gzip", chunks=True, maxshape=(None,))

否则无法扩展数据集。



 类似资料:
  • 问题内容: 我正在尝试创建一个将条目添加到json文件的函数。最终,我想要一个看起来像 等。这就是我所拥有的: 这确实会创建一个条目,例如。但是,如果我再次使用此函数(使用不同的名称和网址),第一个函数将被覆盖。我需要怎么做才能将第二个(第三个…)条目附加到第一个? 编辑 :对此问题的第一个答案和评论已经指出了我在写块中未使用的明显事实。不过,我看不出该怎么做。例如,以下内容显然不会起作用: 问题

  • 问题内容: 我有这个.json文件: 这是我的PHP代码: 问题是,我不确定如何实现它。每次提交表单时,我都会在上面调用此代码,因此我需要ID递增,并且还要使用和保持有效的JSON结构,这可能吗? 问题答案:

  • 我正在使用下面的代码。然而,当我运行代码时,我想在同一个TXT文件中一个接一个地添加新的XML。这是否可以使用JDOM。请帮帮我。。 xmlOutput。输出(文档,新FileWriter(“c:\updated.txt”));是否需要修改?

  • 问题内容: 我正在使用AJAX将数据附加到div元素,从JavaScript填充div,如何在不丢失div中找到的先前数据的情况下将新数据附加到div? 问题答案: 尝试这个:

  • 我想将数据附加到3个不同的工作表中(使用Java和Google工作表API)。 例如,“I like turtles”(我喜欢海龟)到sheetId为1的第一张纸,“123”到sheetId为2的第二张纸,以及到sheetId为3的第二张纸的任何范围。如何附加该数据?更重要的是,如何从图纸中获取图纸ID并设置活动图纸?或者任何其他的方法。有什么建议或例子吗? 非常感谢。

  • 问题内容: 该阿帕奇共享的I /函数O覆盖以前的文本文件。我想将数据附加到我的文件中。有什么我可以使用Commons I / O的方法吗?我可以使用Java的normal来做到这一点,但我对使用Commons I / O的情况感到好奇。 问题答案: 它已在Apache IO的2.1版本中实现。要将字符串追加到文件,只需在函数中传递 true 作为附加参数即可: FileUtils.writeStr