为数组中的图形组合点?
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
我从网络抓取工具中收集了数据,想用它制作折线图。 在我的点列表 ([[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