Python HDF5 扩展阵列

Python HDF5 expand array

我正在尝试扩展 进行整形(2048000, 64) 。在最后一列中,我想添加来自“”。但是我完全不知道该怎么做。

到目前为止我已经尝试过:

mic['time_data'].resize(64, axis = 0)

但它 returns 我是

我对 HDF5 文件还很陌生,所以如果您需要比我提供给您更多的信息,请告诉我!

重新阅读您的 post 后,我意识到您的数据集可以调整大小(否则 h5py 会在调整大小时抛出错误)。您可以通过比较 .shape 属性和 .maxshape 属性来确认。注意:None 表示该轴上没有大小限制。

[为了将来参考,如果您想要一个可调整大小的数据集,请在创建它时包含 maxshape=() 参数。对于这个特定的数据集,如果您只想调整轴 1 的大小,请使用 maxshape=(2048000, None)。]

您的意外结果是由调整大小声明中的一个小错误造成的。从形状 (2048000, 63) 到形状 (2048000, 64) 应该是:mic['time_data'].resize(64, axis=1)mic['time_data'].resize((2048000, 64))

更新答案
这是一个扩展的答案,显示了如何将数据从 'assembledH5Trigger.h5' 添加到 'assembledH5TEST.h5'。作为参考,它会在将数据从触发器复制到麦克风文件之前打印 .shape.maxshape 参数。

with h5py.File('assembledH5TEST.h5', 'r+') as mic, \
     h5py.File('assembledH5Trigger.h5', 'r') as trigger:

    print(f"mic['time_data'] shape={mic['time_data'].shape}; " + \
          f" maxshape={mic['time_data'].maxshape}")          
    print(f"trigger['time_data'] shape={trigger['time_data'].shape}; " + \
          f"maxshape={trigger['time_data'].maxshape}")          
    mic['time_data'].resize((2048000, 64))
    mic['time_data'][:,63] = trigger['time_data'][:,0]

万一以后其他人也有这个问题。这就是我解决它的方法(可能不是一个很好的解决方案,但它有效):

    mic = h5py.File('assembledH5TEST.h5', "r+")
    trigger = h5py.File('assembledH5Trigger.h5', "r")


    arr = np.ones((2048000, 64))

    arr[:, 0:63] = mic["time_data"][:]
    arr[:,63] = trigger['time_data'][:,0]
    # Code to write arr to hdf5 file