【问题标题】:rounding off small numbers in python在python中四舍五入
【发布时间】:2014-06-04 00:04:21
【问题描述】:

我有一个表格,其中包含 5E-7、10E-4 等数字,但这些数字精确到小数点后几位,例如 5.646273838E-7。我知道我可以在 python 中使用 round 函数来设置精度,但由于我的所有数字都不同,我希望能够将每个数字四舍五入以说 2 d.p 但仍将指数保留在答案中。所以我想让 5.646273838E-7 变成 5.64E-7 和 2.38212538E-4 变成 2.38E-4。我试图使用一种方法,可以将我的数字转换为字符串,然后计算出字符串长度,因此对于 5.646273838E-7,如果字符串长度约为 17,我将舍入设置为 (17-2)*0.5 和它可以为我的数据范围完成工作。但是有人能提出更好的方法吗?

@user545424:嘿,这是一件非常有用的事情,知道并且做得很好,除了我的数据是从一个包含字符串和数字的文本文件中读取的。字符串是对象的名称,例如: 名称 Prop_1 Prop_2
object_1 5.343e-10 2.574e-10

然后我使用以下代码读取并显示为表格并保存为乳胶文件 numpy.set_printoptions(precision=2)

    out=numpy.loadtxt('data.txt', dtype=str,usecols=(0,1,2,3))


    col=zip(*out)
    tab=Table(col)
    tab.write('table',format='latex')
    print(tab)

谢谢

【问题讨论】:

    标签: python formatting


    【解决方案1】:
    >>> format(0.1234, '.2e')
    '1.23e-01'
    

    format 函数和密切相关的str.format 方法是您想要的。 .2 表示“小数点后两位”,e 表示科学计数法。有很多选择;有关详细信息,请参阅format string syntax specification

    【讨论】:

      【解决方案2】:

      如果您使用的是 numpy 数组,则可以使用 np.round()。例如:

      >>> import numpy as np
      >>> a = np.random.rand(4,3)
      >>> a
      array([[ 0.77600629,  0.76947092,  0.8145481 ],
             [ 0.08514862,  0.67965067,  0.90147548],
             [ 0.88886939,  0.57478246,  0.38501869],
             [ 0.57264822,  0.3376192 ,  0.55660758]])
      >>> np.round(a,2)
      array([[ 0.78,  0.77,  0.81],
             [ 0.09,  0.68,  0.9 ],
             [ 0.89,  0.57,  0.39],
             [ 0.57,  0.34,  0.56]])
      

      编辑:

      如果您需要保留一定数量的有效数字而不仅仅是四舍五入,您可以使用np.set_printoptions()

      >>> np.set_printoptions(precision=2)
      >>> b = a*1e-10
      >>> b
      array([[  7.76e-18,   7.69e-18,   8.15e-18],
             [  8.51e-19,   6.80e-18,   9.01e-18],
             [  8.89e-18,   5.75e-18,   3.85e-18],
             [  5.73e-18,   3.38e-18,   5.57e-18]])
      

      【讨论】:

      • 不起作用,因为 OP 希望保留 2 个有效数字,而不是四舍五入到 0.01 的倍数。
      • 如果您打印类似np.array([0.0012]) 的内容,您会发现设置精度仍然不是我们所需要的,因为当显示不使用科学计数法时,就会出错。据我所知,设置格式化程序是正确的。不过,我不相信这种方法是最有用的,因为您仍然必须处理诸如自动汇总之类的事情(您可以设置 threshold 来处理它),并且它是全局状态,并且打印 NumPy 数组不会首先,它似乎是最友好的输出格式。不过很高兴知道set_printoptions
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      • 2012-02-05
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多