使用numpy ndarray避免顺序计算中的精度损失

时间:2017-09-07 07:24:19

标签: python numpy math

你好python和numpy专家。 :)

我面临着numpy的精确损失问题。

使用python代码,精度损失将应用于顺序计算的结果。

(由于以下">>> a + b - c"。)

但是有了numpy,">>> np.array([a])+ np.array([b]) - np.array([c])"导致序列中每次计算的精度。

这是其中一个例子。所以任何人都知道在顺序计算过程中如何避免使用numpy评估精度损失?

谢谢,

>>>> import numpy as np
>>> a = 0.123456789123456789                                                                                            
>>> b = 0.000000123456789123456789                                                                                      
>>> c = a - b                                                                                                           
>>>  
>>> # no additional losses                                                                                                                   
>>> a + b - c                                                                                                           
2.469135782501297e-07
>>>
>>> # lose generated at first calculation
>>> np.array([a]) + np.array([b]) - np.array([c])                                                                       
array([  2.46913578e-07])

1 个答案:

答案 0 :(得分:0)

代码中没有精确丢失。 默认情况下,打印浮点数的numpy格式是8.注意它只会影响打印的内容,而不会影响内部存储的内容。

您可以使用numpy.set_printoptions()功能更改它 有关更多信息,请参阅documentation

用你的例子:

In [1]: import numpy as np

In [2]: a = 0.123456789123456789

In [3]: b = 0.000000123456789123456789

In [4]: c = a - b

In [5]: np.array([a]) + np.array([b]) - np.array([c])
Out[5]: array([  2.46913578e-07])

In [6]: np.set_printoptions(precision=16)

In [7]: np.array([a]) + np.array([b]) - np.array([c])
Out[7]: array([  2.4691357825012972e-07])

In [8]: np.set_printoptions(precision=24)

In [10]: np.array([a]) + np.array([b]) - np.array([c])
Out[10]: array([  2.469135782501297171620536e-07])