【问题标题】:Checking if two values are approximately the same in python [duplicate]检查python中的两个值是否大致相同[重复]
【发布时间】:2019-12-17 09:12:57
【问题描述】:

我有两个函数可以给我非常小的数字。我想定义一个IF statements,如果两个值是approximately,则打印它们,否则pass

a = (x, y)
b = (h, p)
If a == b:
   print(a, b)
else:
   pass

为此我们不能使用==。如何定义为接近?因为值的顺序可能像a=7e-25b=1.5e-26

【问题讨论】:

  • 您的近似范围是多少? 100、1000、2、3 ?多少钱?
  • @MohVahedi 你什么意思?偏好是找到最接近的值
  • 决定 eps 值常量比如 eps = 0.0001 然后你可以比较绝对差异 ab 小于 eps...|a-b| < eps
  • 通过谷歌搜索您的问题标题找到了重复项。

标签: python numpy if-statement approximation


【解决方案1】:

你可以使用math.isclose()

from math import isclose
a = 1.0
b = 1.00000001
print(isclose(a, b, abs_tol=1e-8))  # -> True

[评论更新]如果你想找到最接近某个值的列表的值,这里是示例解决方案

a = 7e-25
b = [1.5e-26,1.4e-26,1.3e-26,1.4e-26,1.5e-27]
print(min(b, key=lambda x: abs(a-x)))  # -> 1.5e-26

【讨论】:

  • 我无法理解的一件事是,我如何找到这些a = 7e-25 b = [1.5e-26,1.4e-26,1.3e-26,1.4e-26,1.5e-27] 之间最接近的值应该是1.5e-26
  • 有什么办法吗?
  • 为什么它在 if 语句中不起作用?
  • 你的 if 语句是什么样子的?
  • for bb in range(len(b)): ,if (min(b[bb], key=lambda x: abs(a-x))):,print(print(a,b[bb]))
【解决方案2】:

使用numpy函数isclose

import numpy as np
a = 7e-25
b = 1.5e-26
if np.isclose(a, b):
    print(a, b)

【讨论】:

  • 我无法理解的一件事是,我怎样才能找到这些a = 7e-25 b = [1.5e-26,1.4e-26,1.3e-26,1.4e-26,1.5e-27] 之间最接近的值,它应该是1.5e-26
  • 这是一个不同的问题,请随时提出新的问题。
猜你喜欢
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 2011-06-22
  • 2019-04-27
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
相关资源
最近更新 更多