以合理有效的方式跟踪“在线”价值流的总体中值。

mediantracker的Python项目详细描述


合理有效地跟踪“在线”价值流的中值 时尚。

用法:

from mediantracker import MedianTracker
tracker = MedianTracker()
tracker.add(1)
tracker.add(2)
tracker.add(3)
tracker.add(4)
assert tracker.lower_median() == 2
assert tracker.upper_median() == 3

MedianTracker支持高效的中值查询和动态查询 添加到值列表中。它提供了上中位数和下中位数 到目前为止看到的所有价值观中。可以跟踪任何__cmp__()对象, 除了数字类型。add()tracker需要log(n)时间 使用n项;lower_median()upper_median()在常量中运行 时间。由于必须存储所有值,因此内存使用量与 添加值的数目(o(n))。

可以通过MedianTracker上的迭代来访问这些值, 尽管它们不是以任何特定方式订购的:

sum = 0.0
for val in tracker:
    sum += val
mean = sum / len(tracker)

如果要“在线”处理值,请使用此模块,一次一个,作为 它们到达后,需要知道每个新值之后的新中值(或 一批值)。如果你只想知道整个名单的中位数 更有效的线性时间中值(或更一般的第k次最小值 选择)算法。使用此模块需要o(nlogn)时间和 额外的o(n)空间来计算n项的中值。另一方面, 一个MedianTracker只需要o(nlogn+m)时间 n添加和m中间查询,而运行传统的 非增量中值算法m需要o(n*m)次。

最后,一些资料定义了偶数长度列表的中值为 中间两个值的平均值。这是容易和有效的计算 (恒定时间):

tracker = MedianTracker([1, 2, 3, 4])
median = (tracker.lower_median() + tracker.upper_median()) / 2.0
assert median == 2.5

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用MongoDB进行java漏斗分析?   java如何重构此代码以仅执行一次方法logViolation(),并在单个字符串中获取字符串变量(speedType)的所有值   java如何将方向向量转换为角度?   Java中json文件中的股票价格   java有没有一种方法可以查看网站中的哪些资源加载了selenium?   java文件定位器可以指向不同文件服务器上的目录吗?   java GWT等待SetVisibleRange和ClearData完成   macos Java Applet无法在Mac OS下接收鼠标输入   java BottomNavigationView不支持单次单击必须单击两次   MS SQL Server 2012中的java:我的数据库名称是J.3.0.0\u DEV我无法在Oracle SQL Developer IDE中连接它?   java对JFileChooser的修改,只显示文件夹内容   java如何将动态对象查询更改为criteria builder或更好的性能   java中的swing新字体类型   java Hibernate。删除未使用的条目   上载CSV文件并将其转换为Java模型对象   java如何将信息添加到库的日志消息中?   JavaEclipseGit:使用egit从另一个分支、标记或引用打开版本   使用Firebase控制台消息的java开放视频