Python 通过合并相近的值来减少已排序的数字列表的更好方法?

Python 通过合并相近的值来减少已排序的数字列表的更好方法?,python,numpy,numpy-ndarray,Python,Numpy,Numpy Ndarray,我有一个带有以下值的数字列表作为示例 2, 99, 101, 150, 198, 201, 300 我们假设上面的数组总是按升序排序 我的目标是平均出由变量x定义的彼此接近的值。 假设x=5预期结果如下 2, 100, 150, 200, 300 下面是我提出的代码的工作副本 import statistics def mean_reduce_by_proximity(data, distance): new_data = [] temp = [] for val i

我有一个带有以下值的数字列表作为示例

2, 99, 101, 150, 198, 201, 300
我们假设上面的数组总是按升序排序

我的目标是平均出由变量
x
定义的彼此接近的值。 假设
x=5
预期结果如下

2, 100, 150, 200, 300
下面是我提出的代码的工作副本

import statistics
def mean_reduce_by_proximity(data, distance):
    new_data = []
    temp = []
    for val in data:
        # if temp list is empty
        if (len(temp) == 0):
            temp.append(val)
        # if temp list if not empty
        else:
            # Last item of temp list is in proximity to current value
            if (val - temp[-1]) <= distance:
                temp.append(val)
            # Not in proximity
            else:
                temp_mean = round(statistics.mean(temp))
                new_data.extend([temp_mean])
                temp = []
                temp.append(val)

    # Handle last set of item(s)
    if (len(temp) > 0):
        temp_mean = round(statistics.mean(temp))
        new_data.extend([temp_mean])
        temp = []

    return new_data

In[1]: mean_reduce_by_proximity([2, 99, 101, 150, 198, 201, 300], 5)
Out[1]: [2, 100, 150, 200, 300]
导入统计信息
def平均值(数据、距离):
新的_数据=[]
温度=[]
对于数据中的val:
#如果临时列表为空
如果(透镜(温度)==0):
临时附加(val)
#如果临时列表不为空
其他:
#临时列表的最后一项接近当前值
如果(val-temp[-1])0:
平均温度=四舍五入(统计平均温度)
新数据扩展([临时平均值])
温度=[]
返回新的数据
[1]中:平均值通过邻近度减少[2,99,101,150,198,201,300],5)
Out[1]:[21100150200300]
我的疑问

  • 这种类型的减少是否有一个已知的技术术语
  • 在任何流行的python库中都有内置函数吗 这个

    • 这是一种矢量化方法-

      样本运行-

      In [90]: a
      Out[90]: array([  2,  99, 101, 150, 198, 201, 300])
      
      In [91]: mean_reduce_by_proximity_vectorized(a, thresh=5)
      Out[91]: array([  2., 100., 150., 200., 300.])
      

      这个问题的预期结果是什么:
      2,99,101,102,103,104,105,150,198,201,300
      @SayandipDutta问题中公布的工作方法给出了
      [2.0,102.0,150.0,200.0,300.0]
      ,所以我会假设相同的结果。@Prathamesgharat如果这个答案回答了你的问题,别忘了接受它。更多关于如何做到这一点的信息,等等-。谢谢你的矢量化表格@Divakar!我将尝试一步一步地执行它,以了解它是如何工作的。如果可以,请在您认为python初学者需要的任何地方添加注释。@Prathamesgharat添加了注释。为了更好地理解,最好运行每个步骤并研究其输出。
      In [90]: a
      Out[90]: array([  2,  99, 101, 150, 198, 201, 300])
      
      In [91]: mean_reduce_by_proximity_vectorized(a, thresh=5)
      Out[91]: array([  2., 100., 150., 200., 300.])