python-将数据从hdf5数据集传输到numpy数组时精度下降

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

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

subid2 [0] == subid2 [1].

在截屏之前,我只是不小心删除了2.输出正确.

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

顺便说一下,以下内容:

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

产生False.因此,复制到numpy数组时会损失一些精度.

最佳答案

问题是您的输入是整数类型,但是在创建不指定数据类型的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])检查类型以查看区别.