Python accumulate()计算汇总值

Python 用accumulate()计算汇总值accumulate()函数基于给定的函数返回一个可迭代对象,将一系列归约值汇总在一起,遍历迭代器得出当前汇总值。默认的函数是operator.add()。可以使用乘积函数代替默认的求和函数来改变accumulate()的行为。Python文档中有一个很巧妙的实例,使用max()函数得到当前序列中的最大值。

可使用当前汇总值计算数据四等分值,计算每个样本值的当前汇总值,并用公式int(4 * value / total)把它们四等分。

前面讲过用一系列经纬度坐标描述旅途的一系列路径段。基于距离把路径点四等分,可以找到旅行路线的中点。

旅行数据格式如下:

(Leg(start=Point(latitude=37.54901619777347, longitude=-76.33029518659048),
     end=Point(latitude=37.840832, longitude=-76.273834), distance=17.7246),
 Leg(start=Point(latitude=37.840832, longitude=-76.273834),
     end=Point(latitude=38.331501, longitude=-76.459503), distance=30.7382),
...,
 Leg(start=Point(latitude=38.330166, longitude=-76.458504),
     end=Point(latitude=38.976334, longitude=-76.473503), distance=38.8019))

每个路径段对象包含起点、终点和距离3个元素,四等分算法如下所示:

distances = (leg.distance for leg in trip)
distance_accum = tuple(accumulate(distances))
total = distance_accum[-1] + 1.0
quartiles = tuple(int(4 * d / total) for d in distance_accum)

从路径段中提取距离数据,计算每段的累积距离,该序列的最后一项便是总距离,在总距离上加1.0确保4 * d / total返回3.9983,然后截断取到3。如果不加1.0,最后一项的值会为4,从而产生一个不存在的“第五等分”。对某些数据(数值非常大)来说,可能需要加上一个更大的数值。
quartiles的计算结果如下所示:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]

可以使用zip()函数合并等分序列值与原始数据点,还可以使用类似于groupby()的函数为每个等分创建路径段集合。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程