【问题标题】:Python how to handle very small numbersPython如何处理非常小的数字
【发布时间】:2018-06-01 17:21:49
【问题描述】:

我正在比较 2 个字典中的数字(总比较数 ~ 1M)。这是一个代码sn-p:

for i in dict1:
    val1 = dict[i]
    val2 = dict2[i]

    if (val1 != 0.000):
        perctg_diff = (val1 - val2)/val1 * 100
        if perctg_diff > 3.0:
            dict3.update({i:(val1,val2,perctg_diff)})
    if (val2 !=0.000):
        perctg_diff = (val2 - val1)/val2 * 100
        if perctg_diff > 3.0:
            dict3.update({i:(val1,val2,perctg_diff)})

dict3 中超过 3% 时,我正在寻找百分比差异并写下差异。执行脚本后发现dict3中的一些数字是

(1052712, (2.88541545330242e-33, 2.3194405728563e-27, 99.9998755986471))
(1052713, (8.1367737331018e-34, 7.83224080670401e-31, 99.8961118033279))
(1052715, (1.79168848952333e-33, 6.71766997709614e-31, 99.733287211841))
(1052717, (1.03397638198887e-25, 4.49948480152819e-26, 56.4836791255002))
(1400879, (0.0, 1.39114642689358e-36, 100.0))
(1290291, (0.0, 1.89369462623834e-20, 100.0))

当数字这么小时,我可以摆脱数字舍入并忽略比较的有效/高效方法是什么?

(使用带有 numpy 的 python 2.7)

【问题讨论】:

  • 我不明白这和numpy有什么关系?
  • 也许是round 数字?
  • 我不明白,但可能是python中的decimal模块或numpy.nextafter()可以提供帮助。
  • 我发现这可能对你有帮助stackoverflow.com/questions/10555659/…
  • “小”是什么意思?这些百分比差异是正确的,没有数字四舍五入。 (指数相差2以上,所以小了100多倍,所以百分比相差大于99%。)

标签: python python-2.7 numpy


【解决方案1】:

numpy.isclose 与您想要的很接近(双关语)。我评价 公式:

绝对(a - b)

因此您可以使用它来过滤您的数据,atol 是您仍要考虑的最小绝对差值,rtol 设置为 3%。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多