python求解中位数

首先将数组nums进行排序,然后找到中间位置的数值
如果数组长度n为奇数,则(n+1)/2处对应值为中位数,如果数组下标从0开始,还需要减去1
如果数组长度n为偶数,则n/2,n/2+1两个位置数的平均值为中位数

假设中位数为x,并采用大小根堆来存储元素

  1. 采用大根堆存储小于等于中位数的元素,记大根堆的长度为 n m a x n_{max} nmax
  2. 采用小根堆存储大于中位数的元素,记小根堆的长度为 n m i n n_{min} nmin
  3. 保持 n m i n ≤ n m a x ≤ n m i n + 1 n_{min}\le n_{max}\le n_{min}+1 nminnmaxnmin+1
    在遍历数组num的过程中,维持以上三个条件,即确保大根堆的堆顶元素必为中位数,那么
  • n u m ≤ x num\le x numx时,将num推入que_max中,同时比较大小根堆的长度,当 n m a x > n m i n + 1 n_{max}>n_{min}+1 nmax>nmin+1,表明新的中位数小于原来的中位数,则将que_max中堆顶元素弹出,并推入到小根堆que_min中
  • n u m > x num> x num>x时,将num推入que_minx中,同时比较大小根堆的长度,当 n m a x < n m i n n_{max}<n_{min} nmax<nmin,表明新的中位数大于原来的中位数,则将que_min中堆顶元素弹出,并推入到大根堆 q u e m a x que_max quemax
import numpy as np
import heapq
nums = np.random.choice(np.array(20),10,replace=False)
print('数组为',nums)
def findmid(nums):
    que_min = list() #小根堆,存储大于中位数的元素
    que_max = list() #大根堆,存储小于等于中位数的元素 !python中默认建造小根堆,可以将元素进行取负,来构造大根堆
    n = len(nums)
    for i in range(n):
        if not que_max or nums[i] <= -que_max[0]:
            heapq.heappush(que_max,-nums[i])
            if len(que_max) > len(que_min)+1:
                heapq.heappush(que_min,-que_max[0])
                heapq.heappop(que_max) 
        else:
            heapq.heappush(que_min, nums[i])
            if len(que_min) > len(que_max):
                heapq.heappush(que_max,-que_min[0])
                heapq.heappop(que_min)
    if n % 2==0:
        return (que_min[0] - que_max[0])/2
    else:
        return que_max[0]
print('数组的中位数为:',findmid(nums))

输出结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/367833.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习复习(2)——线性回归SGD优化算法

目录 线性回归代码 线性回归理论 SGD算法 手撕线性回归算法 模型初始化 定义模型主体部分 定义线性回归模型训练过程 数据demo准备 模型训练与权重参数 定义线性回归预测函数 定义R2系数计算 可视化展示 预测结果 训练过程 sklearn进行机器学习 线性回归代码…

CSC联合培养博士申请亲历|联系外导的详细过程

在CSC申报的各环节中&#xff0c;联系外导获得邀请函是关键步骤。这位联培博士同学的这篇文章&#xff0c;非常详细且真实地记录了申请过程、心理感受&#xff0c;并提出有益的建议&#xff0c;小编特推荐给大家参考。 2024年国家留学基金委公派留学项目即将开始&#xff0c;其…

网络原理TCP/IP(2)

文章目录 TCP协议确认应答超时重传连接管理断开连接 TCP协议 TCP全称为"传输控制协议(Transmission Control Protocol").⼈如其名,要对数据的传输进⾏⼀个详细 的控制; TCP协议段格式 • 源/目的端口号:表⽰数据是从哪个进程来,到哪个进程去; • 32位序号/32位确认…

会声会影下载 Corel VideoStudio 2023 v26.1.0.268中文激活版

会声会影Corel VideoStudio 2023破解版是领先的视频编辑和转换软件&#xff01;提供直观友好的功能&#xff0c;让用户能够更快速便捷地制作独特的视频&#xff0c;高质量的效果&#xff0c;各种滤镜、贴纸、过渡、模板等都将让您事半功倍&#xff01;软件允许您导入自己的剪辑…

社区店加盟:如何选择适合的品牌和项目?

在当下创业热潮中&#xff0c;社区店加盟成为了许多创业者的首选。特别是鲜奶吧这种深受各年龄段人群喜爱的项目&#xff0c;更是备受关注。然而&#xff0c;面对众多品牌和项目&#xff0c;如何选择适合自己的社区店加盟品牌和项目呢&#xff1f; 作为一位资深的鲜奶吧创业者…

关于node.js奇数版本不稳定 将11.x.x升级至16.x.x不成功的一系列问题(一)

据说vue2用16稳定一些 vue3用18好一点&#xff08;但之前我vue3用的16.18.1也可以&#xff09; 为维护之前的老项目 先搞定node版本切换 下载nvm node版本管理工具 https://github.com/coreybutler/nvm-windows/releases 用这个nvm-setup.zip安装包 安之前最好先将之前的nod…

西瓜书学习笔记——k近邻学习(公式推导+举例应用)

文章目录 算法介绍实验分析 算法介绍 K最近邻&#xff08;K-Nearest Neighbors&#xff0c;KNN&#xff09;是一种常用的监督学习算法&#xff0c;用于分类和回归任务。该算法基于一个简单的思想&#xff1a;如果一个样本在特征空间中的 k k k个最近邻居中的大多数属于某个类别…

git命令上传本地项目到远程仓库的悲惨遭遇

git命令上传本地项目到远程仓库的悲惨遭遇。我想把前端后端合并到一个仓库下2个分支&#xff0c;结果呢&#xff0c;不仅合并没有成功&#xff0c;还把代码丢失了。 如图&#xff0c;原始我写好了完整的后端代码&#xff0c;都丢失了。 远程仓库里也都没有了。奇怪了。 难道远…

二、Java学习 数据类型与变量

目录 一、字面常量 二、数据类型 三、变量 语法格式 四、类型转换 隐式类型转换 强制类型转换 字符串类型 五、类型提升 1.int与long 2.byte与byte 小结 一、字面常量 常量即运行期间&#xff0c;固定不变的量。 字面常量的分类&#xff1a; 1.字符串常量&#xff…

TQ15EG开发板教程:开发板资源介绍

时钟资源 采用时钟芯片CDCM6208提供系统时钟 PL端时钟 PS 收发器时钟 PL收发器时钟 电源 BANK500 BANK501 BANK502 BANK503(专用) 1.8V 1.8V 1.8V 1.8V PS端外设 QSPI 采用2片MT25QU256 拼接成8bit的QSPI存储系统。采用1.8V供电 SD卡 SATA接口 PS端以太网接口 D…

Java宝典-数据类型

目录 1.变量与常量2.Java中的数据类型3.整型3.1 字节型byte3.2 短整型short3.3 整型int3.4 长整型long 4.浮点型4.1 单精度浮点型float4.2 双精度浮点型double 5.字符型6.布尔型7.类型转换7.1 隐式类型转换7.2 显示类型转换(强制类型转换) 8.类型提升 大家好,我是你们的Vampire…

了解UDP发送过快导致的问题和对应解决方案

在当今这个以数据为核心的时代&#xff0c;企业对于数据传输的速度和稳定性有着日益增长的需求。UDP凭借其低延迟和高效率的特性&#xff0c;在实时通信和大规模数据传输领域扮演着关键角色。然而&#xff0c;UDP的无连接特性和缺乏可靠性也给数据传输带来了挑战&#xff0c;尤…

【python错误】Pytorch1.9 ImportError: cannot import name ‘zero_gradients‘

错误&#xff1a;Pytorch1.9 ImportError: cannot import name ‘zero_gradients’ 错误提示&#xff1a; ImportError: cannot import name ‘zero_gradients’ from ‘torch.autograd.gradcheck’ (/root/miniconda3/envs/d2l/lib/python3.9/site-packages/torch/autograd/g…

3种JWT验证和续签的策略

3 种JWT验证和续签的策略 好文推荐&#xff1a;一文教你搞定所有前端鉴权与后端鉴权方案&#xff0c;让你不再迷惘 - 掘金 (juejin.cn) 3 种jwt 验证的策略 通过解析去验证&#xff1a;每次访问api时parse jwt 判断是否vaild jwt有效 正常调用api jwt无效 返回401 缺点&a…

AVR 328pb串口基本介绍和使用

AVR 328pb串口基本介绍和使用 &#x1f4cd;相关篇《AVR 328pb定时器0基本介绍和使用》 &#x1f516;基于Atmel Studio 7.0开发环境。 &#x1f4cd;结合参考同架构lgt8f328p中文文档&#xff1a;http://www.prodesign.com.cn/wp-content/uploads/2023/03/LGT8FX8P_databook…

北朝隋唐文物展亮相广西,文物预防性保护网关保驾护航

一、霸府名都——太原博物馆收藏北朝隋朝文物展 2月1日&#xff0c;广西民族博物馆与太原博物馆携手&#xff0c;盛大开启“霸府名都——太原博物馆北朝隋文物展”。此次新春展览精选了北朝隋唐时期150多件晋阳文物珍品。依据“巍巍雄镇”“惊世古冢”“锦绣名都”三个单元&am…

多线程编程6——使用 volatile 解决问题可见性问题

一、内存可见性问题 内存可见性问题是出现线程安全问题的原因之一。 1、什么是内存可见性问题&#xff1f; 一个线程针对一个变量进行读取操作&#xff0c;另一个线程针对这个变量进行修改操作&#xff0c;此时读到的值不一定是修改后的值&#xff0c;出现了线程安全问题&a…

学习Android的第三天

目录 Android LinearLayout 线性布局 XML 属性 LinearLayout 几个重要的 XML 属性 LinearLayout.LayoutParams XML 属性 divider (分割线) Android RelativeLayout 相对布局 RelativeLayout 布局属性 TableLayout ( 表格布局 ) TableRow 子控件的主要属性 Android Lin…

爬虫入门到精通_基础篇4(BeautifulSoup库_解析库,基本使用,标签选择器,标准选择器,CSS选择器)

1 Beautiful说明 BeautifulSoup库是灵活又方便的网页解析库&#xff0c;处理高效&#xff0c;支持多种解析器。利用它不用编写正则表达式即可方便地实线网页信息的提取。 安装 pip3 install beautifulsoup4解析库 解析器使用方法优势劣势Python标准库BeautifulSoup(markup,…

ADB的配置和使用及刷机root

ADB的配置和使用 ADB即Android Debug Bridge&#xff0c;安卓调试桥&#xff0c;是谷歌为安卓开发者提供的开发工具之一&#xff0c;可以让你的电脑以指令窗口的方式控制手机。可以在安卓开发者网页中的 SDK 平台工具页面下直接下载对应系统的 adb 配置文件&#xff0c;大小只…
最新文章