numpy.subtract在1维数组上执行减法运算

时间:2016-08-15 12:27:08

标签: python arrays numpy

  

我阅读帖子is-floating-point-math-broken并获取原因   发生了,但我找不到可以帮助我的解决方案..

     

如何进行正确的减法?

Python版本2.6.6,Numpy版本1.4.1。

我有两个numpy.ndarray,每个都包含float32值,origin和new。我正在尝试使用numpy.subtract来减去它们,但我得到以下(奇数)结果:

>>> import numpy as 
>>> with open('base_R.l_BSREM_S.9.1_001.bin', 'r+') as fid:
        origin = np.fromfile(fid, np.float32)
>>> with open('new_R.l_BSREM_S.9.1_001.bin', 'r+') as fid:
        new = np.fromfile(fid, np.float32)
>>> diff = np.subtract(origin, new)
>>> origin[5184939]
0.10000000149011611938
>>> new[5184939]
0.00000000023283064365
>>> diff[5184939]
0.10000000149011611938

当我尝试在5184939减去数组时,我得到与diff相同的结果[5184939]

>>> origin[5184939] - new[5184939]
0.10000000149011611938

但是,当我执行以下操作时,我得到了这样的结果:

>>> 0.10000000149011611938 - 0.00000000023283064365
0.10000000125728548

并且这不等于diff [5184939]

如何进行正确的减法? (0.10000000125728548是我需要的那个)

请帮助,并提前致谢

1 个答案:

答案 0 :(得分:0)

您可以在问题中添加Python和numpy版本。

差异可能来自np.float32 v np.float64 dtype,默认的Python浮点类型以及显示标准。 numpy使用与底层Python不同的显示舍入。

减法本身没有区别。

我可以重现0.10000000125728548值,该值也可能显示为0.1(小数点后8位)。

我不确定0.10000000149011611938的来源。看起来好像new[5184939]同样为0,而不仅仅是像0.00000000023283064365那样的小事。