如何验证numpy双精度数组与HDF文件读写过程无多余类型转换
验证HDF读写NumPy double数组无多余类型转换的方法
- 检查读写前后的数组
dtype匹配性- 确认原始数组的类型:打印
original_arr.dtype,double类型的NumPy数组对应输出为dtype('float64') - 读取HDF文件中数据集的存储类型,不需要加载全量数据,直接执行
print(hdf_group['data'].dtype),如果输出和原始数组的float64一致,说明存储阶段没有发生类型转换(比如转字符串存储) - 确认加载后数组的类型:打印
data.dtype,和原始float64一致即说明加载阶段也无多余类型转换
- 确认原始数组的类型:打印
- 全量数值比对验证
直接用np.array_equal(original_arr, data)做全等比对,返回True则说明读写前后数值完全一致。如果存在double转string再转double的中间操作,字符串序列化/反序列化过程必然会产生精度损失或者格式误差,不可能和原始double数组的每一位都完全匹配
也可以用浮点零误差比对做二次确认:np.allclose(original_arr, data, rtol=0, atol=0),效果和全等比对一致 - 命令行工具直接校验HDF元数据
用h5ls -v 你的hdf文件名.h5查看数据集属性,输出中如果标注type = native double,就证明数据在HDF中就是以原生双精度浮点类型存储,不存在字符串格式的存储环节
补充说明:你当前使用的h5py接口默认会直接匹配NumPy数组的dtype写入HDF,没有显式指定转换规则的前提下,不会主动做double转string的多余操作,你写的加载逻辑也是直接映射HDF原生double到NumPy
float64,本身不存在多余转换风险。
内容的提问来源于stack exchange,提问作者itamar nov
相关产品推荐
相关产品推荐

