【发布时间】: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