【问题标题】:Efficent way of finding values that are within 1% of standard deviation of eachother找到彼此标准偏差在 1% 以内的值的有效方法
【发布时间】:2019-09-15 19:18:19
【问题描述】:

我有一个值列表,我想删除在另一个值的标准差百分之一以内的所有值。

我目前有两个嵌套的 for 循环。我想知道是否有更有效的方法,也许使用 numpy 和矢量化? 我当前的低效代码。

# 1% of the std
std_range = np.std(values) / 100
# if value is in 1% of std, set to None
for idx, val in enumerate(values):
    for idx2, val2 in enumerate(values):
        if val is None or val2 is None:
            continue
        elif (val2 - std_range <= val <= val2 + std_range) and idx != idx2:
            values[idx] = None
# delete None values
values = list(filter(None, ml_results))

【问题讨论】:

  • 你能提供一个示例值和预期结果吗?
  • @NicoT 例如 [1,3,5,7,8,8.006],8 或 8.006 将被删除,因为它们在彼此标准差的百分之一以内。跨度>
  • 数组中元素的顺序是否相关?如果没有,您可以对元素进行排序并与下一个/上一个元素进行比较
  • 不,顺序无关紧要。这是个好主意,谢谢。

标签: python arrays numpy vectorization


【解决方案1】:

正如你提到的,这里的顺序不相关是一种方法。

    std_range = np.std(values) / 100
    sorted_values = sorted(values)
    for id, val in enumerate(sorted_values[:-1]):
        next_value = sorted_values[id + 1]

        if val + std_range >= next_value:  # value is within range
            sorted_values[id] = None

    print(list(filter(None, sorted_values)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-27
    • 2019-07-04
    • 2015-06-27
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 2017-09-26
    相关资源
    最近更新 更多