You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Python代码 从坐标列表X、y中剔除预定义异常值outliers

坐标异常点过滤代码修复方案

原代码问题梳理

  • 计数器n仅在循环外初始化一次,第一轮内层循环结束后n等于异常点列表长度,后续遍历其他坐标时内层循环不会执行,导致仅能处理第一个点
  • 逻辑错误:当前只要坐标和某一个异常点不匹配就直接加入新列表,没有完成全量异常点比对,会导致异常点误加入
  • 语法错误:n+=缺失增量值,正确写法为n+=1
  • 浮点数直接用==比较存在精度风险,若后续数据集有精度误差建议用差值小于阈值的方式判断

修复方案

方案1:修改原循环逻辑

X = dataset.iloc[:, 1].values
X = X.reshape(len(X),1)
y = dataset.iloc[:, 2].values

X_new = []
y_new = []
i = 0
while i < len(X):
    is_outlier = False
    n = 0 # 每次遍历新坐标时重置异常点计数器
    while n < len(outlier_x):
        if (X[i] == outlier_x[n] and y[i] == outlier_y[n]):
            is_outlier = True
            break # 匹配到异常点直接跳出内层循环
        n += 1
    # 全量异常点比对完成后,确认不是异常点再加入新列表
    if not is_outlier:
        X_new.append(X[i])
        y_new.append(y[i])
    i += 1

方案2:更简洁的集合判断方案(效率更高,无需嵌套循环)

X = dataset.iloc[:, 1].values
# 若后续比较出现维度不匹配问题,可改为 X = dataset.iloc[:, 1].values.flatten()
X = X.reshape(len(X),1)
y = dataset.iloc[:, 2].values

# 先把异常点转为元组集合,查询复杂度为O(1)
outlier_set = set(zip(outlier_x, outlier_y))

X_new = []
y_new = []
for x_val, y_val in zip(X, y):
    if (x_val, y_val) not in outlier_set:
        X_new.append(x_val)
        y_new.append(y_val)

运行结果

按照给定的数据集和异常点列表,过滤后得到的X_new和y_new共包含5组有效坐标:

xy
0.00.998440
1.02.188544
0.01.043314
1.01.733181
11.09.737930

内容的提问来源于stack exchange,提问作者Viki Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:45:05