你好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])
答案 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])