【问题标题】:No conversion path for dtype ('<U1') issuedtype ('<U1') 问题没有转换路径
【发布时间】:2019-01-05 18:34:49
【问题描述】:

我有一个包含 3d 数组和标签(0 或 1)的 2d 列表(Data_set),我想用两个数据集制作 h5py 文件,一个用于 3d 数组,另一个用于标签,这是我的代码为此: `

    data = []
    label = []
    for i in range(len(Data_set)):
        data.append(Data_set[i][0])# 3d array
        label.append(Data_set[i][1])#label
    data = np.array(data)
    label = np.array(label)
    dt = np.dtype('int16')
    with h5py.File(output_path+'dataset.h5', 'w') as hf:
        hf.create_dataset('data',dtype=dt ,data=data, compression='lzf')
        hf.create_dataset('label', dtype=dt, data=label, compression='lzf')

` 2d 列表的内容如下图所示: 但是当我运行代码时,它给了我一个错误:见下图 请帮我解决问题?

【问题讨论】:

  • 当您提供data 参数时,您不需要设置dtyoe。它可以从 data 自己的 dtype 中推断出来。
  • label.astype('S1') 也可以——它可以保存字节串,但不能保存 unicode(PY3 的默认值),至少不能直接保存。

标签: python python-3.x numpy hdf5 h5py


【解决方案1】:

您的标签不是整数,它们是字符串,这对 HDF5 来说是个问题。您的错误消息与由长度为 1 的字符串组成的数组有关。有关详细信息,请参阅 Strings in HDF5

您可以在构造 NumPy 数组之前或之后转换为整数,这里有几个示例:

label = np.array(label).astype(int)
# or, label = np.array(list(map(int, label)))

或者,由于您的值为01,因此选择bool 可能更有效:

label = np.array(label).astype(int).astype(bool)

另外,考虑将元数据保存为attributes

【讨论】:

  • 感谢您的重播,我认为 bool 对我来说不是一个好类型,因为我的标签需要 0 和 1。 '考虑将元数据作为属性'是什么意思?
  • 属性,我建议你看Attributes in h5py docs。这个想法是数据位于数据集中,属性位于属性中。属性就像数据集,但可以附加到组或数据集,并且总是一次性读取。
  • 谢谢,我在为标签构造 numpy 数组之前使用 'label = np.array(list(map(int, label)))',这解决了我的问题,我想将数据集提供给CNN模型用于训练和测试,你觉得我需要属性吗?
  • @honar.cs,对不起,不知道。我对 CNN 模型没有经验。
  • 没问题,非常感谢您的有用回答。
猜你喜欢
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2021-05-02
相关资源
最近更新 更多