Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 找到彼此标准偏差在1%以内的值的有效方法_Python_Arrays_Numpy_Vectorization - Fatal编程技术网

Python 找到彼此标准偏差在1%以内的值的有效方法

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

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

我目前有两个嵌套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))
#标准的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%以内。数组中元素的顺序是否相关?如果不相关,您可以对元素进行排序并与下一个/上一个元素进行比较。否,顺序不重要。这是一个好主意,谢谢。