为数组中的图形组合点?

Combining Points for a Graph in an Array?

我从网络抓取工具中收集了数据,想用它制作折线图。 在我的点列表 ([[1,4],[2,3],[3,8]...]) 中,有些点在 'x' 上相互重叠,但在 'x' 上有不同的值'y'。这些应该合并为一个(平均)。

[[2,3],[5,2],[3,4],[5,4]...] ----------> [[2,3],[5,3],[3,4]...]

有没有比循环更有效的方法?

你只能遍历这些,但我们可以用 pythonic 来处理它。这是我想出的解决方案:

from itertools import groupby
from operator import itemgetter
from statistics import mean
inp = [[2,3],[5,2],[3,4],[5,4]]

points = [(x, mean(map(itemgetter(1), g))) for x, g in groupby(sorted(inp, key=itemgetter(0)), key=itemgetter(0))]
print(points)  # [(2, 3), (3, 4), (5, 3)]

我们可以将此列表理解分解为以下等效代码:

points = []
inp.sort(key=itemgetter(0))                   # Sort results by 'x' value (for groupby)
for x, g in groupby(inp, key=itemgetter(0)):  # Iterate through all grouped x values
    y = map(itemgetter(1), g)                 # Extract all the 'y' values into a list
    avg_y = mean(y)                           # Get the statistical mean of all the 'y'
    points.append((x, avg_y))                 # Add this x,y-coordinate to the result set