簡體   English   中英

從坐標列表中刪除異常值

[英]Remove outliers from the lists of coordinates

我有 2 個帶有十個點坐標的列表 X 和 y。 列表 X 依次包含點 1 到 10 的 x 坐標,列表 y 包含相同 1 到 10 個點的 y 坐標。 我還有 2 個額外的點異常值列表:outlier_x 和 outlier_y。 我想查看我的 X 和 Y 列表,將它們的坐標與異常值進行比較並創建新的 2 個列表(X_new 和 y_new),其中將包含沒有異常值的點。

在我堆疊的地方有我的嵌套循環。 它只記錄第一個點,sims 不會移動到下一個點。 你能幫忙解決嗎?

X_new = []
y_new = []
i = 0
n = 0
while i < len(X):
    while n < len(outlier_x):
        if (X[i] == outlier_x[n] and y[i] == outlier_y[n]):
            continue
        X_new.append(X[i])
        y_new.append(y[i])
        n+=1                    
    i+=1


10 points coordinates:
x   y
0   0.99844039
1   2.188544418
4   7.572173987
7   6.138441957
11  11.73792995
0   1.043313797
1   1.733181475
4   7.424136351
7   6.138441957
11  9.73792995

Outliers:
x   y
4   7.572173987
7   6.138441957
11  11.73792995
4   7.424136351
7   6.138441957

也許像這樣

from random import randint 
X = [randint(-5, 5) for xi in range(10)]
Y = [randint(-5, 7) for yi in range(10)]
outlier_X = [-3, 4]
outlier_Y = [-2, 6]
final_X = [] 
final_Y = []
for xi, yi in zip(X, Y):
    x_is_valid = all([xi > ox and xi < ox for ox in outlier_X])
    y_is_valid = all([yi > oy and yi < yi for oy in outlier_Y])
    if x_is_valid and y_is_valid:
        final_X.append(xi)
        final_Y.append(yi)

這應該有效:

points = set(zip(X, y))
outliers = set(zip(outlier_x, outlier_y))
X_new, y_new = zip(*(points - outliers))

在此之后, X_newy_new將是元組,只是一個提示。

這是基於@sin tribu 答案的工作解決方案:

X_new = []
y_new = []

for xi, yi in zip(X, y):
    x_is_valid = all([xi != ox  or xi == ox for ox in outlier_x])
    y_is_valid = all([yi != oy and yi != oy for oy in outlier_y])
    if x_is_valid and y_is_valid:
            X_new.append(xi)
            y_new.append(yi) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM