Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何避免此列表中的舍入错误?_Python_Numpy_Floating Point_Rounding - Fatal编程技术网

Python 如何避免此列表中的舍入错误?

Python 如何避免此列表中的舍入错误?,python,numpy,floating-point,rounding,Python,Numpy,Floating Point,Rounding,这个列表应该有x[50]为零,两边对称,但它稍微偏离中心,因为我假设是舍入误差。如何修改代码以避免这种情况 谢谢 import numpy as np L=2*np.pi s=101 ds=L/(s-1) svals=np.arange(1,101) x=[0] x[0:s]=((svals-1)*ds)-L/2 print(x) 从浮点运算中获得精确的输出可能是一件棘手而棘手的事情。您可以使用np.linspace获得所需的列表: 输出: [-3.14159265 -3.0787608 -

这个列表应该有x[50]为零,两边对称,但它稍微偏离中心,因为我假设是舍入误差。如何修改代码以避免这种情况

谢谢

import numpy as np
L=2*np.pi
s=101
ds=L/(s-1)
svals=np.arange(1,101)
x=[0]
x[0:s]=((svals-1)*ds)-L/2
print(x)

从浮点运算中获得精确的输出可能是一件棘手而棘手的事情。您可以使用np.linspace获得所需的列表:

输出:

[-3.14159265 -3.0787608  -3.01592895 -2.95309709 -2.89026524 -2.82743339
 -2.76460154 -2.70176968 -2.63893783 -2.57610598 -2.51327412 -2.45044227
 -2.38761042 -2.32477856 -2.26194671 -2.19911486 -2.136283   -2.07345115
 -2.0106193  -1.94778745 -1.88495559 -1.82212374 -1.75929189 -1.69646003
 -1.63362818 -1.57079633 -1.50796447 -1.44513262 -1.38230077 -1.31946891
 -1.25663706 -1.19380521 -1.13097336 -1.0681415  -1.00530965 -0.9424778
 -0.87964594 -0.81681409 -0.75398224 -0.69115038 -0.62831853 -0.56548668
 -0.50265482 -0.43982297 -0.37699112 -0.31415927 -0.25132741 -0.18849556
 -0.12566371 -0.06283185  0.          0.06283185  0.12566371  0.18849556
  0.25132741  0.31415927  0.37699112  0.43982297  0.50265482  0.56548668
  0.62831853  0.69115038  0.75398224  0.81681409  0.87964594  0.9424778
  1.00530965  1.0681415   1.13097336  1.19380521  1.25663706  1.31946891
  1.38230077  1.44513262  1.50796447  1.57079633  1.63362818  1.69646003
  1.75929189  1.82212374  1.88495559  1.94778745  2.0106193   2.07345115
  2.136283    2.19911486  2.26194671  2.32477856  2.38761042  2.45044227
  2.51327412  2.57610598  2.63893783  2.70176968  2.76460154  2.82743339
  2.89026524  2.95309709  3.01592895  3.0787608   3.14159265]
它分两步进行,以避免在linspace范围跨越0时出现数字错误。如果x是一步完成的,则

x = np.linspace(-np.pi, np.pi, 101)

那么x[50]处的值是4.440892098500626e-16,而不是预期的x[50]为0。

我建议您在交互式Python会话中一次一个地进行这些计算,并查看每个计算的结果。您似乎混淆了numpy数组和列表。x=[0]后跟x[0:s]看起来特别可疑。
x = np.linspace(-np.pi, np.pi, 101)