TypeError: Object dtype dtype('O') has no native HDF5 equivalent
参考资料
- Python TypeError: No conversion path for dtype: dtype(‘
- TypeError: Object dtype dtype(‘O’) has no native HDF5 equivalent
- python - 使用不同大小的h5py数组进行保存
错误描述
在对h5文件写的过程中,首先遇到了错误OSError: Cannot write data (no appropriate function for conversion path)
,网上搜索之后,与之相关的问题很少,大部分提到的是字符串编码问题,参照资料1,对字符串的编码修改,但错误依旧。在这个地方卡了很长时间,一直检查数据类型哪里是不是有问题?最后尝试性,将最后创建数据集中的dtype
去掉,即置为None
。即将
1 | datafile.create_dataset("PrivateTest_gt", dtype = 'uint8', data=PrivateTest_z) |
改为
1 | datafile.create_dataset("PrivateTest_gt", data=PrivateTest_z) |
问题出现了转机,提示的错误不一样了,TypeError: Object dtype dtype('O') has no native HDF5 equivalent
,再查询这个问题上,发现很多博客,如资料2和资料3提到出现错误的原因是:
要存储的数据中存在维度不一致的数据
具体datafile.create_dataset("PrivateTest_gt", data=PrivateTest_z)
一行中,PrivateTest_z列表中存储着两种shape的图片数据,一种是48 * 48,而另一种是128 * 128。这种情况h5py无法统一处理。
解决方法
参照资料,解决这个问题常见有两种。
- 散装
将相同维度的数据放在同一个dataset中,即把原始数据拆分成多个dataset存储
- 统装
统一数据的维度。我用的就是这种方法,我将所有图片的数据都统一成128 * 128(对于48的resize),即解决上述问题。