Python 找到彼此标准偏差在1%以内的值的有效方法
我有一个值列表,我想删除所有在另一个值的标准偏差百分之一以内的值 我目前有两个嵌套for循环。我想知道是否有一种更有效的方法,也许是使用numpy和矢量化? 我当前的低效代码Python 找到彼此标准偏差在1%以内的值的有效方法,python,arrays,numpy,vectorization,Python,Arrays,Numpy,Vectorization,我有一个值列表,我想删除所有在另一个值的标准偏差百分之一以内的值 我目前有两个嵌套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
# 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))
#标准的1%
标准范围=np.标准(值)/100
#如果值为标准的1%,则设置为无
对于idx,枚举中的val(值):
对于idx2,枚举中的val2(值):
如果val为无或val2为无:
持续
elif(val2-std_range正如您所提到的顺序与此无关,这是一个假设
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)))
您能提供一个示例值和预期结果吗?@NicoT例如[1,3,5,7,8,8.006],8或8.006将被删除,因为它们彼此之间的标准偏差在1%以内。数组中元素的顺序是否相关?如果不相关,您可以对元素进行排序并与下一个/上一个元素进行比较。否,顺序不重要。这是一个好主意,谢谢。