没有 dtype ('<U1') 问题的转换路径
No conversion path for dtype ('<U1') issue
我有一个包含 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')
`
二维列表的内容如下图所示:
但是当我 运行 代码时,它给了我一个错误:见下图
请帮我解决问题?
您的标签不是整数,而是字符串,这是 HDF5 的问题。您的错误消息与由长度为 1 的字符串组成的数组有关。有关详细信息,请参阅 Strings in HDF5。
您可以在构建 NumPy 数组之前或之后转换为整数,这里有几个示例:
label = np.array(label).astype(int)
# or, label = np.array(list(map(int, label)))
或者,由于您的值为 0
或 1
,选择 bool
可能更有效:
label = np.array(label).astype(int).astype(bool)
此外,考虑将元数据保存为 attributes。
我有一个包含 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')
`
二维列表的内容如下图所示:
您的标签不是整数,而是字符串,这是 HDF5 的问题。您的错误消息与由长度为 1 的字符串组成的数组有关。有关详细信息,请参阅 Strings in HDF5。
您可以在构建 NumPy 数组之前或之后转换为整数,这里有几个示例:
label = np.array(label).astype(int)
# or, label = np.array(list(map(int, label)))
或者,由于您的值为 0
或 1
,选择 bool
可能更有效:
label = np.array(label).astype(int).astype(bool)
此外,考虑将元数据保存为 attributes。