我通过将三个列表压缩在一起来创建一个元组列表,数据对: XYZip = list(zip(XaData, Y1aData, Y2aData))
[(0.001625625, 4.782947316198166, -0.011032947316198166), (-2.5e-06, 4.783447358402665, 0.020216552641597337), (0.0008137499999999999, 4.782997384780477, -0.017282997384780476), (0.00081, 4.783247405882726, 0.020216752594117274), (0.001625625, 4.782066023993667, -0.011032066023993668), ( 0.00324625, 4.780809700135795, 0.03271919029986421), ..., (19.4121325, 4.653511649011105, 1.1703464883509889)]
我需要去掉 XaData 值重复的元组,比如这个 0.001625625。整个元组 (0.001625625, 4.782066023993667, -0.011032066023993668) 需要去。顺序无关紧要。我可以在第二步进行排序。我试过 set() 无济于事。
数据将被馈送到 scipy.CubicSpline 函数,其中 x 需要严格增加并且不会接受重复项!
我试过了……
XYZip = list(zip(XaData, Y1aData, Y2aData))
XYUnique = set(XYZip)
XYSorted = sorted(XYUnique)
XaData, Y1aData, Y2aData = zip(*XYSorted)
...显然不删除具有重复 XaData 值的元组。
这是我第一步需要的:
[(0.001625625, 4.782947316198166, -0.011032947316198166), (-2.5e-06, 4.783447358402665, 0.020216552641597337), (0.0008137499999999999, 4.782997384780477, -0.017282997384780476), (0.00081, 4.783247405882726, 0.020216752594117274), (0.00324625, 4.780809700135795, 0.03271919029986421), .. ., (19.4121325, 4.653511649011105, 1.1703464883509889)]
set()
将删除所有重复项。剩下的值很可能真的很接近。
如果你改用 pandas 就简单明了。
例子:
x = 1,1,2,3,4,5
y = 1,2,3,4,5,6
z = 1,3,5,7,9,11
pd.DataFrame(zip(x, y, z), columns=["x","y","z"]).drop_duplicates(subset='x', keep="last")
第一步 创建数据框
df = pd.DataFrame(zip(x, y, z), columns=["x","y","z"])
x | y | z | |
---|---|---|---|
0 | 1 | 1 | 1 |
1 | 1 | 2 | 3 |
2 | 2 | 3 | 5 |
3 | 3 | 4 | 7 |
4 | 4 | 5 | 9 |
5 | 5 | 6 | 11 |
第二步 删除重复项参考
df = df.drop_duplicates(subset='x', keep="last")
x | y | z | |
---|---|---|---|
1 | 1 | 2 | 3 |
2 | 2 | 3 | 5 |
3 | 3 | 4 | 7 |
4 | 4 | 5 | 9 |
5 | 5 | 6 | 11 |
下降 1, 1, 1 因为
keep="last"
temp = {i_x: (i_y, i_z) for i_x, i_y, i_z in zip(x, y, z)}
[((i,)+temp[i]) for i in temp]
第一步 将 x y z 转换为字典(键 x 因为我需要删除 x 上的重复项)
temp = {i_x: (i_y, i_z) for i_x, i_y, i_z in zip(x, y, z)}
第二步 转换为元组列表
[((i,)+temp[i]) for i in temp]
结果
[(1, 2, 3), (2, 3, 5), (3, 4, 7), (4, 5, 9), (5, 6, 11)]
# drop (1,1,1) because (1, 1, 1) and (1, 2, 3) are same in first element.
(0.001625625, 4.782947316198166, -0.011032947316198166)
, | , |
same, not same , not same
, | , |
(0.001625625, 4.782066023993667, -0.011032066023993668)
# so
(0.001625625, 4.782947316198166, -0.011032947316198166)
# not equal
(0.001625625, 4.782066023993667, -0.011032066023993668)
结合您的代码
XYZip = list(zip(XaData, Y1aData, Y2aData))
df = pd.DataFrame(zip(XaData, Y1aData, Y2aData), columns=["XaData","Y1aData","Y2aData"])
df = df.drop_duplicates(subset='XaData', keep="last")
# if you want to convert to list of tuple
result = [tuple(i) for i in df.values]