【发布时间】:2017-07-14 05:10:29
【问题描述】:
我很惊讶我无法找到这个问题的答案。我正在将浮点值写入 hdf5 数据集,并且我想将精度设置为小数点后 10 位。从 hdf5 数据集上的documentation 来看,似乎没有任何方法可以设置精度。我得到的最接近的是'float32'或'float64',但'float32'会切断我的数字。文件大小对我来说是一个大问题,'float64' 的不必要数字使文件显着变大。 hdf5可以选择精度吗?
我的问题的一个例子: data[0] 的真实值为 0.0066896507
group.create_dataset(name, data=data, dtype='float64')
data[0] 产生 0.0066896506999999999,但是
group.create_dataset(name, data=data, dtype='float32')
给我 0.0066896505,这是不正确的。数据集中的其他数字更不正确。
这也很奇怪,因为当我这样做时
x = h5py.File(my_file,'r')
print(x['dataset'][0])
它给了我正确的数字。但是当我在控制台中输入x['dataset'][0] 时,它会给出我上面写的内容。数据实际上是如何存储的?它真的给出了那些额外的数字吗?如您所见,我对 hdf5 (以及一般的 python)有点陌生。感谢您的帮助。
【问题讨论】:
-
float32和float64是大多数编译器中的标准浮点类型(float和double在c编译器中)。每个数字使用 4 和 8 个字节。处理器和编译器旨在有效地处理这些大小。尝试使用 6 个字节(或更糟的是 5 或 7 个字节)会显着降低效率,而不会大幅减少内存使用量。 -
如果我将此 hdf5 文件发送给其他人,他们会看到数字为 10 精度或更高吗?
-
这可能是打印精度问题而不是存储问题。
-
这很有可能。我想这不是问题,谢谢!
标签: python-2.7 precision hdf5 h5py