【问题标题】:how to compare two list values whether their are falling in same range or not using python based on tolreance如何使用基于 tolreance 的 python 比较两个列表值是否在同一范围内
【发布时间】:2019-12-02 17:27:49
【问题描述】:

我有两个列表命名 x 和 y 即,

x = [5.959099113541438, 4.279741749390212, 5.919230806380509, 
4.881404217563612, 4.643287477596932, 5.70059531654403, 
5.18744222885107, 5.395735445427837, 5.689814995270075, 
4.754347454466908, 4.097313043135817, 4.925822302958147, 
4.1472414317517785, 4.266112382902533, 5.16970834320798]

y = [-0.3759893858615659, 4.417729726522458, 5.03520438037026, 
3.181412048355534, 2.794763936177837, -4.438962739119985, 
4.811646347331597, 4.417729726522462, -4.884054229031293, 
1.5033713273412632, -4.884054229031293, 15.035204380370258, 
-2.985142421537198, -2.5984943093594963, 20.5722590126799377]

现在我只需要检查整数值是否在同一范围内,而不是具有一定的容忍度

真实案例示例

  1. x[0] (5.959099113541438) 应该与 y[0](-0.3759893858615659) 一致,因为差异仅为 -5。
  2. x[3] (4.881404217563612) 应该与 y[3] (3.181412048355534) 一致,因为差异仅为 1。

虚假案例示例

  1. x[11] (4.925822302958147) 应该是错误的 y[11] (15.035204380370258) 因为差异是 10
  2. x[14] (5.16970834320798) 应该是 false 到 y[14] ( 20.5722590126799377) 因为差异超过 14

我需要检查这些列表是否属于特定范围类别,并返回所有元素的布尔值。

【问题讨论】:

  • 公差等级是多少?你怎么知道区别是“只是”-5还是“差不多”-5?
  • @ForceBru。现在我一直保持它固定。但我需要根据列表中的值动态确定容差值,无需人工干预。

标签: python list numpy floating range-checking


【解决方案1】:

IIUC,这只是

thresh = 10
np.abs(np.array(x) - np.array(y) ) < thresh

输出:

array([ True,  True,  True,  True,  True, False,  True,  True, False,
        True,  True, False,  True,  True, False])

【讨论】:

  • 谢谢@Quang Hoang。但是如果我们需要程序本身根据列表中的值动态决定阈值,而不是人工干预呢?你能建议我吗?
【解决方案2】:

您可以通过列表推导来做到这一点:

x = [5.959099113541438, 4.279741749390212, 5.919230806380509, 4.881404217563612, 4.643287477596932, 5.70059531654403, 5.18744222885107, 5.395735445427837, 5.689814995270075, 4.754347454466908, 4.097313043135817, 4.925822302958147, 4.1472414317517785, 4.266112382902533, 5.16970834320798]

y = [-0.3759893858615659, 4.417729726522458, 5.03520438037026, 3.181412048355534, 2.794763936177837, -4.438962739119985, 4.811646347331597, 4.417729726522462, -4.884054229031293, 1.5033713273412632, -4.884054229031293, 15.035204380370258, -2.985142421537198, -2.5984943093594963, 20.5722590126799377]

diffs = [abs(xa-ya) for xa,ya in zip(x,y)]
threshed = [d<10 for d in diffs]
print(threshed)

【讨论】:

  • 谢谢@jeremy_rutman。但是如果我们需要程序本身根据列表中的值动态决定阈值,而不是人工干预呢?你能建议我吗?
  • 是的 - 如果阈值是列表值的固定函数,thresh=f(lists) 然后只需使用该函数值而不是固定阈值,例如。 thresh=f(x,y);threshed=[d&lt;thresh for d in diffs]
猜你喜欢
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 2020-07-27
  • 2011-02-04
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多