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.])