Python 将数据从hdf5数据集传输到numpy阵列时失去精度

Python 将数据从hdf5数据集传输到numpy阵列时失去精度,python,numpy,precision,hdf5,Python,Numpy,Precision,Hdf5,我试图将数据从hdf5数据集(下面的屏幕截图中为f_one)复制到numpy数组中,但发现我正在失去一些精度。 屏幕截图的最后一行(最后一条打印语句)应为 subid2[0]==subid2[1] 我只是在截图前不小心删除了2。输出是正确的 如您所见,Python似乎认为这两个数字完全相同——但是,当它们包含在numpy数组中时,我需要精度来区分这两个数字。有人知道我怎样才能达到这个精度吗?简言之,我怎样才能使最后一个打印语句产生错误 顺便说一下,以下是: f_one['Subhalo

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

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

subid2[0]==subid
2
[1]

我只是在截图前不小心删除了2。输出是正确的

如您所见,Python似乎认为这两个数字完全相同——但是,当它们包含在numpy数组中时,我需要精度来区分这两个数字。有人知道我怎样才能达到这个精度吗?简言之,我怎样才能使最后一个打印语句产生错误

顺便说一下,以下是:

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

产生。因此,在复制到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])
检查类型以查看差异