[英]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_new
和y_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.