NumPy:计算累积中位数

2024-03-28

我有大小 = n 的样本。

我想计算每个 i: 1 sample[:i]在 numpy. 例如,我计算了每个 i 的平均值:

cummean = np.cumsum(sample) / np.arange(1, n + 1)

我可以在没有循环和理解的情况下对中位数做类似的事情吗?


知道Python有一个heapq模块可以让你保持一个可迭代的运行“最小值”,我做了一个搜索heapq and median,并找到了各种项目steaming medium。这个:

http://www.ardendertat.com/2011/11/03/programming-interview-questions-13-median-of-integer-stream/ http://www.ardendertat.com/2011/11/03/programming-interview-questions-13-median-of-integer-stream/

has a class streamMedian维持两个heapq,一个包含值的下半部分,另一个包含值的上半部分。中位数是其中一个值的“最高值”,或者是两个值的平均值。班级有一个insert方法和一个getMedian方法。大部分工作都在insert.

我将其复制到 Ipython 会话中,并定义:

def cummedian_stream(b):
    S=streamMedian()
    ret = []
    for item in b:
        S.insert(item)
        ret.append(S.getMedian())
    return np.array(ret)

Testing:

In [155]: a = np.random.randint(0,100,(5000))
In [156]: amed = cummedian_stream(a)
In [157]: np.allclose(cummedian_sorted(a), amed)
Out[157]: True
In [158]: timeit cummedian_sorted(a)
1 loop, best of 3: 781 ms per loop
In [159]: timeit cummedian_stream(a)
10 loops, best of 3: 39.6 ms per loop

The heapq流方法要快得多。


列表理解@Uriel给的比较慢。但如果我替代np.median for statistics.median它比@Divakar's排序解决方案:

def fastloop(a):
    return np.array([np.median(a[:i+1]) for i in range(len(a))])

In [161]: timeit fastloop(a)
1 loop, best of 3: 360 ms per loop

And @Paul Panzer's分区方法也不错,但与流式传输类相比仍然很慢。

In [165]: timeit cummedian_partition(a)
1 loop, best of 3: 391 ms per loop

(我可以复制streamMedian如果需要的话,可以对此答案进行分类)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NumPy:计算累积中位数 的相关文章

随机推荐

  • React-Native ProductFlavors(错误类型3:Activity类不存在)

    我想用2productFlavors对于我的 Android 应用程序 live and staging In app build grandle我这样定义它们 defaultConfig applicationId com some id
  • spring boot webflux:避免处理程序中的线程阻塞方法调用

    我刚刚开始使用WebFlux以及整个反应范式 我坚持这一点 Component public class AbcHandler private ObjectMapper objectMapper new ObjectMapper publi
  • 传递带有变量值作为参数的自定义属性

    我创建了一个自定义属性类 它将检查系统安全性 并在存在安全错误时引发身份验证异常 public class EntityChecker System Attribute public EntityChecker int entityId d
  • Fetch / Axios 在 React Native 中严重崩溃(但仅限于某些 URL)

    我的应用程序在执行时严重崩溃certainAPI 调用 我将范围缩小到这一点 这不是 HTTP 与 HTTPS 的问题 我最终使用了两种不同的模拟 API 令我惊讶的是 一种有效 另一种则无效 两者基本相同 请参阅下面的片段 WIFI 或蜂
  • 使用“是吗?”验证电话号码

    我正在尝试使用 Yup 验证电话号码 phone Yup number typeError That doesn t look like a phone number positive A phone number can t start
  • Android:录制的视频似乎*失真*

    我正在尝试使用 MediaRecorder 从相机录制视频 这是一个代码片段 snip mr setAudioSource MediaRecorder AudioSource MIC mr setVideoSource MediaRecor
  • 在 Apple Watch 模拟器(xCode 8、Swift 3、iOS 10)上的 watchOS 中运行 SpriteKit 游戏 - libswiftSwiftOnoneSupport 错误

    我下载了xCode 8 0 beta并打开了一个最近写的项目swift 2然后我将其转换为swift 3使用 xCode 然后我添加了一个watchOS设置 游戏 以我的项目为目标 文件 gt 新建 gt 目标 我检查了 GameScene
  • 如何限制字符串中的字母数量

    我有一个程序要求用户输入问题 然后程序回答它 我想知道的是如何限制用户可以输入变量的字母数量 蟒蛇的input函数不能直接执行此操作 但您可以截断返回的字符串 或重复直到结果足够短 method 1 answer input What s
  • SpringBoot - 解析HTTP请求头时出错

    我在跑步SpringBoot Application刚刚检查了服务器日志 发现了几个这样的错误 我不明白是什么原因导致的 因为每天 12 24 小时后都会出现该错误 Tomcat 版本运行于8 5 11 2018 03 04 17 03 2
  • 以编程方式旋转 UITextView

    有一个奇怪的问题 如果你创建一个UITextView创建后立即旋转它 某些线条或字符将不可见 尝试这个 myTextView font UIFont boldSystemFontOfSize 20 myTextView text Hello
  • MySQL 更新触发器 - 查找更改的列?

    我有一个有 120 列的表 我需要设置审计跟踪 如果发生更改 它将记录任何列 就像现在一样 我想我必须为每一列设置一个具有如下条件的触发器 IF NEW columnName OLD columnName THEN log the old
  • 使用正则表达式提取 r ngram

    卡尔 布罗曼的帖子 https kbroman wordpress com 2015 06 22 randomized hobbit 2 https kbroman wordpress com 2015 06 22 randomized h
  • Numpy 查找具有相同值的组的索引

    我有一个由 0 和 1 组成的 numpy 数组 y 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1 我想计算 1 或 0 组的索引 因此 对于上面的示例 一组的结果应该类似于 result 0 2 8 9
  • 混合jpa继承策略-inheritanceType.JOINED与inheritanceType.SINGLE_TABLE

    我的类结构如下所示 我在这里实现了两个单独的策略 但根类的继承策略 即 InheritanceType JOINED 正在整个层次结构中使用 Entity Inheritance strategy InheritanceType JOINE
  • ORACLE 索引表上的插入性能

    为什么 Insert 语句在索引表上执行速度较慢 这实际上是同一类问题 为什么需要更多时间才能将所有杂货放在厨房的正确位置 而不是在逛完杂货店后把所有东西都留在袋子里 这是因为在存放杂货时 您希望将它们放在一个漂亮且众所周知的位置 以便以后
  • 使用 UMD 捆绑包捆绑 Angular 2 应用程序(不构建供应商捆绑包)

    我目前正在将我的 Angular 2 应用程序与 WebPack 捆绑在一起 我们仍在快速循环 因此我们不想增加构建和应用程序加载过程的延迟 而是希望包含很少变化的 Angular 2 UMD CDN 准备的捆绑包 例如
  • PySpark 输出文件数量

    我是 Spark 新手 我有一个简单的 pyspark 脚本 它读取 json 文件 将其展平并将其作为 parquet 压缩文件写入 S3 位置 读取和转换步骤运行得非常快 并使用 50 个执行器 我在 conf 中设置 但写入阶段耗时较
  • Devise::PasswordsController#create 中的 EOFError

    我在从 Ruby on Rails 应用程序发送邮件重置密码时遇到了问题 密码重置邮件过去可以使用 但现在不行了 密码重置是服务器发送的唯一电子邮件 一旦我提交了我想要获取密码的电子邮件 Rails 就会显示完整的跟踪信息 Devise P
  • 防止只读文本框在 Silverlight 中变灰

    在 Silverlight 中 如何制作文本框IsReadOnly True 不会变灰 我的应用程序的灰色效果看起来很糟糕 我想禁用它 或更改其外观 颜色 Silverlight 2 中有几个选项 最简单的是使用 TextBlock 因为它
  • NumPy:计算累积中位数

    我有大小 n 的样本 我想计算每个 i 1 sample i 在 numpy 例如 我计算了每个 i 的平均值 cummean np cumsum sample np arange 1 n 1 我可以在没有循环和理解的情况下对中位数做类似的