【问题标题】:Python selecting values that are close to each other with values in both arraysPython选择两个数组中的值彼此接近的值
【发布时间】:2022-01-05 21:33:48
【问题描述】:

我有两个数组。

org_df = [2732.64, 2296.35, 1262.28, 567.6, 436.29, 262.98, 238.74, 210.38,19]
calc_df = [19, 2296.34, 436.3, 2732.64]

我想比较这些数组并创建一个具有相同元素且容差为 0.01 的新数组。

new_list = [2732.64, 2296.35 ,436.29,19]

我添加了代码,但它不起作用:

【问题讨论】:

  • 在您的代码中,您的 if 语句始终为真,因为绝对差异始终为 >=0.01 或

标签: python arrays list match


【解决方案1】:

您可以使用numpy 模块的isclose 函数来实现。

new_list = [i for i in org_df if np.any(np.isclose(i, calc_df, atol=0.01))]

【讨论】:

  • 感谢您的帮助
【解决方案2】:

如果你使用numpy

org_df = np.array([2732.64, 2296.35, 1262.28, 567.6, 436.29, 262.98, 238.74, 210.38,19])
calc_df = np.array([19, 2296.34, 436.3, 2732.64])

new_list = org_df[np.any(np.abs(org_df - calc_df[:, None]) <= 0.01, axis=0)]
print(new_list)

# Output:
array([2732.64, 2296.35,  436.29,   19.  ])

【讨论】:

    【解决方案3】:

    如果您不想使用像 numpy 这样的依赖项,您可以使用列表推导和 python 的超棒范围比较来做到这一点。 Python 非常适合这个!

    diff = abs(tolerance)
    new_list = [y for x in org_df for y in calc_df if (y-diff <= x <= y+diff)]
    

    给出准确的结果。虽然它可能比 numpy 数组慢。

    【讨论】:

      【解决方案4】:

      为避免添加像 numpy 这样的依赖项,您需要遍历这两个列表并执行以下操作:

      new_list = []
      for a in org_df:
          for b in calc_df:
              if -0.01 < a - b < 0.01:
                  new_list.append(a)
      

      如果您想改用列表推导式,请使用这一行:

      new_list = [a for a in org_df for b in calc_df if -0.01 < a - b < 0.01]
      

      【讨论】:

      • 感谢您的帮助,但此方法只选择相同的值
      • 我不确定我是否理解你的问题,如果它们在公差范围内,这会减去这些值并将它们添加到new_list。对于您的虚拟数据,我得到了您要求的结果
      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多