python求解中位数

news/2024/11/23 1:45:02/

首先将数组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])/2else:return que_max[0]
print('数组的中位数为:',findmid(nums))

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


http://www.ppmy.cn/news/1341758.html

相关文章

《计算机网络简易速速上手小册》第7章:云计算与网络服务(2024 最新版)

文章目录 7.1 云服务模型&#xff08;IaaS, PaaS, SaaS&#xff09;- 你的技术魔法盒7.1.1 基础知识7.1.2 重点案例&#xff1a;构建和部署 Python Web 应用实现步骤具体操作步骤1&#xff1a;创建 Flask Web 应用步骤2&#xff1a;准备应用部署 7.1.3 拓展案例1&#xff1a;使…

2024年【道路运输企业主要负责人】考试及道路运输企业主要负责人考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 道路运输企业主要负责人考试参考答案及道路运输企业主要负责人考试试题解析是安全生产模拟考试一点通题库老师及道路运输企业主要负责人操作证已考过的学员汇总&#xff0c;相对有效帮助道路运输企业主要负责人考试题…

Keil软件某些汉字输出乱码,0xFD问题,51单片机

1. 问题 keil软件输入某些汉字的时候会输出乱码&#xff0c;例如&#xff1a;升、 数 2. 原因 keil软件会忽略0xFD。 升的GB2312编码为 0xc9fd&#xff0c;keil解析为0xc9数的GB2312编码为 0xcafd&#xff0c;keil解析为0xca 关于Keil软件中0xFD问题的说明 3. 解决方案1 …

【译】在 Mac 上加速 PyTorch 训练

写在前面 为什么突然深度介入大模型领域了 因为最近在评估大模型用于行业应用&#xff0c;通过 OpenCompass 排行榜了解到了很多大模型&#xff0c;像文心一言是自己深度试用过的&#xff0c;趁着这次评估&#xff0c;也体验或者通过其他团队的介绍了解了通义千问、清华智谱、…

UML---用例图,类图

用例图 用例图&#xff08;Use Case Diagram&#xff09;主要描述系统的功能需求和参与者与系统之间的交互。它是用户与系统交互的最简表示形式&#xff0c;展现了用户和与他相关的用例之间的关系。用例图被视为系统的蓝图&#xff0c;通过它&#xff0c;人们可以获知系统不同种…

非精线搜索步长规则Armijo规则Goldstein规则Wolfe规则

非精确线搜索步长规则 在数值优化中&#xff0c;线搜索是一种寻找合适步长的策略&#xff0c;以确保在目标函数上获得足够的下降。如最速下降法&#xff0c;拟牛顿法这些常用的优化算法等&#xff0c;其中的线搜索步骤通常使用Armijo规则、Goldstein规则或Wolfe规则等。 设无…

背景点击监督的时序动作定位 Background-Click Supervision for Temporal Action Localization

该论文介绍了 BackTAL,这是一种利用背景点击监督进行弱监督时序动作定位的新方法。 它将焦点从动作帧转移到背景帧,通过强调背景错误来改进定位。 BackTAL 包含分数分离模块和亲和力模块,增强了位置和特征建模。 Background-Click的说明 Click 点击级别监督的说明…

2023_12蓝桥杯STEMA 考试 Scratch 中级试卷解析

2023蓝桥杯STEMA 考试 Scratch 中级试卷(12 月)解析 由于没有原始文件,这里使用的角色和背景和实际题目会有所差异,已经尽量还原原题,以下代码仅供参考。吐槽一句:蓝桥杯越来越变态了!\(`Δ’)/\(`Δ’)/\(`Δ’)/孩子学习速度永远也赶不上内卷的速度。 一、选择…