我有一个包含3d数组的2d列表(数据集)和一个标签(0或1),我想用两个数据集制作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')
答案 0 :(得分:1)
您的标签不是整数,而是字符串,这是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。