将数据从hdf5数据集传输到numpy数组时精度损失

时间:2016-06-24 06:03:35

标签: python numpy precision hdf5

我正在尝试将数据从hdf5数据集(f_one,在下面的屏幕截图中)复制到一个numpy数组中,但我发现我失去了一些精确度。 enter image description here

屏幕截图的最后一行(最后一个打印语句)应该是

subid2[0] == subid 2 [1]

我在拍摄截图之前意外删除了2。输出是正确的。

正如您所看到的,Python似乎认为这两个数字完全相同 - 但是,当它们包含在numpy数组中时,我需要精确区分这两个数字。 有谁知道如何获得这种精确度?简而言之,如何让最后一个print语句产生False?

顺便说一句,以下内容:

    f_one['SubhaloID'][0] == f_one['SubhaloID'][1]

产生错误。因此,在复制到numpy数组时会有一些精度丢失。

1 个答案:

答案 0 :(得分:4)

问题是您的输入是整数类型,但是在创建numpy数组而未指定数据类型时,默认情况下最终将它们转换为浮点数。为避免这种情况,请在为此数据创建numpy数组时使用dtype=np.int64。另一种选择是直接转换现有的整数数组,因此继承其条目的类型。

这是一个简化的例子。

import numpy as np
a = [30000000200000000, 30000000200000001]
print(a[0]==a[1])           # False 
b = np.array(a)
print(b[0]==b[1])           # False, direct conversion still has integers 
c = np.array([])
for i in range(2):
    c = np.append(c, a[i])
print(c[0]==c[1])           # True, the entries are now floats
d = np.array([], dtype=np.int64)
for i in range(2):
    d = np.append(d, a[i])
print(d[0]==d[1])           # False, the entries were declared as integers

使用type(c[0])type(d[0])检查类型以查看差异。

相关问题