H5py 存储字符串列表列表

Posted

技术标签:

【中文标题】H5py 存储字符串列表列表【英文标题】:H5py store list of list of strings 【发布时间】:2016-10-18 19:18:14 【问题描述】:

在 h5py 中是否有可能创建一个由字符串列表组成的数据集。我试图创建一个可变长度的嵌套数据类型,但这会导致我的 python 解释器出现分段错误。

def create_dataset(h5py_file):
    data = [['I', 'am', 'a', 'sentecne'], ['another', 'sentence']]
    string_dt = h5py.special_dtype(vlen=str)
    nested_dt = h5py.special_dtype(vlen=string_dt)
    h5py_file.create_dataset("sentences", data=data, dtype = nested_dt)

【问题讨论】:

【参考方案1】:

如果您不打算编辑 hdf5 文件(并可能使用更长的字符串),您也可以简单地使用:

h5py_file.create_dataset("sentences", data=np.array(data, dtype='S'))

【讨论】:

如果您的数据包含非 ASCII 字符,这也会导致问题,请在此处阅读有关在 HDF 中存储字符串的更多信息:docs.h5py.org/en/stable/strings.html【参考方案2】:

如果您按照post 中的建议将数据定义为 dtype=object 的 numpy 数组,而不是列表列表,您应该能够获得所需的功能。

def create_dataset(h5py_file):
    data = np.array([['I', 'am', 'a', 'sentence'], ['another', 'sentence']], dtype=object)
    string_dt = h5py.special_dtype(vlen=str)
    h5py_file.create_dataset("sentences", data=data, dtype=string_dt)

【讨论】:

TypeError: Object dtype dtype('O') has no native HDF5 equivalent - 您的参考与 HDF 文件无关

以上是关于H5py 存储字符串列表列表的主要内容,如果未能解决你的问题,请参考以下文章

将 hdf5 matlab 字符串加载到 Python 中

是否可以使用 python 3 对 h5py 中的键进行切片而不形成列表?

H5py文件

如何从字符串列表中删除引号并将其再次存储为列表..?

将列表存储到数组列表中的字符串

H5PY键读取缓慢