精华内容
下载资源
问答
  • 第90百分位数

    千次阅读 2020-09-22 10:29:52
    基于Excel 首先有这么一个数组 y= [1, 2, 3, 4, 5, 6, 6, 6, 6, 7, 8, 9] ...那么这个第90%分位数是怎么求出来的呢? 主要基于两个公式 (n−1) ∗ p = i + j eq(1) 90th = (1−j) ∗array[i] + j ∗ arra...

    基于Excel

    首先有这么一个数组

    y= [1, 2, 3, 4, 5, 6, 6, 6, 6, 7, 8, 9]

    =PERCENTILE(B1:B12,0.9)

    =PERCENTILE(C1:C12,0.9)

    那么这个第90%分位数是怎么求出来的呢?

    主要基于两个公式

    (n−1) ∗ p = i + j                                                eq(1)

    90th = (1−j) ∗ array[i] + j ∗ array[i+1]                eq(2)

    其中n代表数据的个数,i代表(n−1)∗p结果的整数部分,j代表其小数部分

    此时n=12 p=0.9

    所以

    基于等式1

    (12-1)× 0.9 = 9 + 0.9

    即 i=9  j=0.9

    90th = (1-0.9)×array[9]*+0.9×array[10] = 0.7 + 7.2 = 7.9

    ps:中位数是50%分位数

     

     

     

     

     

    展开全文
  • 第90百分位数的概念与计算

    万次阅读 2017-09-21 21:01:22
    题目描述:思路:知乎上的讨论  今天做了道题,刚开始没读懂题,网上搜了一下关于95百分位的解释,大家各有说法,各有自己的理解。但是看了很多人的评论也是,表示基本都看不懂。  从维基百科上可以找到这么一...

    题目描述:

    在这里插入图片描述

    思路:

    知乎上的讨论

      今天做了道题,刚开始没读懂题,网上搜了一下关于第95百分位的解释,大家各有说法,各有自己的理解。但是看了很多人的评论也是,表示基本都看不懂。

      从维基百科上可以找到这么一段话:

    There is no standard definition of percentile, however all definitions yield similar results when the number of observations is very large and the probability distribution is continuous.

      可见对于百分位并没有十分标准的定义。所以仅在此简单总结一下第xth百分位的计算,以便日后查看,也希望大家能少走弯路,至于具体含义大家可以去维基百科查看。

      既然网上没找到实现代码,就想到了Excel可能有相应的函数,果不其然。

    res=PERCENTILE(array,p)res = PERCENTILE(array,p)res=PERCENTILE(array,p)

      其中:array为你的序列存储位置,比如A1:A12(在excel里的位置对应题目测试样例的array[0:11]),p为百分位值(以题目为例,p=0.9)

      然后查了下它的实现原理:

      首先将你的输入数组进行从小到大排序,然后计算:

    (n−1)∗p=i+j(n-1)*p = i + j(n1)p=i+j

      其中n为数组元素的个数,将计算结果的整数部分用i表示,小数部分用j来表示。则最终的percentile值为:

    res=(1−j)∗array[i]+j∗array[i+1]res = (1-j) * array[i] + j * array[i+1]res=(1j)array[i]+jarray[i+1]

      因为题目给的数组是排好序的,所以我们计算(n-1)*p = (12-1)*0.9 = 9.9,则整数部分 i=9,小数部分j=0.9。查找数组得知,array[i] = array[9] = 7;array[i+1] = array[10] = 8。

      因为,我们可以得到测试样例的结果为:

    res=(1−j)∗array[i]+j∗array[i+1]=(1−0.9)∗7+0.9∗8=7.9res = (1-j) * array[i] + j * array[i+1] =(1-0.9)*7+0.9*8 = 7.9res=(1j)array[i]+jarray[i+1]=(10.9)7+0.98=7.9

    代码实现:

    import java.util.*;
    
    public class Main {
    
    	public static double getPercentile(int[] A, double p) {
    		if (A == null)
    			return 0;
    		double res = 0;
    		Arrays.sort(A); // 从小到大排序
    		double x = (A.length - 1) * p;
    		int i = (int) x; // 取出整数部分
    		double j = x - i; // 还没找到最精确的取double数的小数部分的方法,有可能会有误差
    		res = (1 - j) * A[i] + j * A[i + 1];
    		return res;
    	}
    
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		int n = in.nextInt();
    		double p = 0.9;
    		double res;
    		int[] A = new int[n];
    		for (int i = 0; i < n; i++) {
    			A[i] = in.nextInt();
    		}
    		res = getPercentile(A, p);
    		System.out.println(res);
    	}
    }
    

    ------至所有正在努力奋斗的程序猿们!加油!!
    有码走遍天下 无码寸步难行
    1024 - 梦想,永不止步!
    爱编程 不爱Bug
    爱加班 不爱黑眼圈
    固执 但不偏执
    疯狂 但不疯癫
    生活里的菜鸟
    工作中的大神
    身怀宝藏,一心憧憬星辰大海
    追求极致,目标始于高山之巅
    一群怀揣好奇,梦想改变世界的孩子
    一群追日逐浪,正在改变世界的极客
    你们用最美的语言,诠释着科技的力量
    你们用极速的创新,引领着时代的变迁

    ——乐于分享,共同进步,欢迎补充
    ——Treat Warnings As Errors
    ——Any comments greatly appreciated
    ——Talking is cheap, show me the code
    ——诚心欢迎各位交流讨论!QQ:1138517609
    ——CSDN:https://blog.csdn.net/u011489043
    ——简书:https://www.jianshu.com/u/4968682d58d1
    ——GitHub:https://github.com/selfconzrr

    展开全文
  • 如:1, 2, 3 ,7 全距为: 7 - 1= 6平均偏差:半内四分位数间距: 四分位数:将数值从小到大排列,并分成四等份,需要三个分割点,这三个分割点分别称为一,二,三 四分位数,分别用Q1,Q2,Q3表示。...

    概念:数值数据围绕其平均值分布的离散与集中程度称为数据的离差或变差


    全距:这组数中的最大值与最小值的差

        如:1, 2, 3 ,7

        全距为: 7 - 1= 6

    平均偏差:

    半内四分位数间距:

        四分位数:将数值从小到大排列,并分成四等份,需要三个分割点,这三个分割点分别称为第一,第二,第三 四分位数,分别用Q1,Q2,Q3表示。

    四分位距 =  Q3 - Q1

    半内四分位距: (Q3 - Q1)/ 2

    10~90 百分位数间距:

        将一组数按从小到大排列,处于第p%位置的数称为 第 p  百分位数。

    10~90百分位数间距 =  p90 -  p10(第90百分位数减去第10百分位数)

    标准差s:(方差: s 的平方)



    展开全文
  • 给定文件,每个文件中有一行逗号分隔的数据,请找出该数据流中tp90 line,即第90百分位数。即按顺序处于第90%位置的数。 说明 比如文件内容: 2,3,4,5,10,8,9,1,6,7 排序后第90%位置为第9个,即为9。 注意如果第90%...

    题目

    给定文件,每个文件中有一行逗号分隔的数据,请找出该数据流中tp90 line,即第90百分位数。即按顺序处于第90%位置的数。

    说明

    比如文件内容: 2,3,4,5,10,8,9,1,6,7 排序后第90%位置为第9个,即为9。 注意如果第90%长度不是整数,则向下取整。如数据流长度为115,115 * 90% = 103.5,则取第103个数。

    思路

    其实很简单,最简单的做法就是转成数组,使用jdk自带的sort(TimSort)方法排序,然后求出对应值即可。1000万数据在笔记本(SSD、8G内存、i5处理器)上运行,大概耗时7s左右。

    优化

    优化思路

    • 不用全部排序,我们只需要大致定位区间,然后在这个区间排序即可
    • 亿级以内无需使用多线程,多线程的损耗大于收益,比如对cpu的二级缓存不友好等,这是很重要的优化点
    • jdk的集合类,包装类能不用就不用,哪怕是一个字符串转数字,就有不小的优化空间,同样也是缓存友好

    上代码

    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.util.Arrays;
    
    public class Solution {
        public static final int ASCII_0 = 48;
        public int getTp90Line(File file){
            int[] record = new int[1024*10];//初始化一堆区间,用来记录这个区间内有多少个数
            byte[] buffer = new byte[1024*1024*10];//IO缓冲
            int all = 0;
            int temp = 0;
            try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))){
                int i;
                while((i = bis.read(buffer,0,buffer.length)) > 0){
                    for(int a = 0;a<i;a++){
                        if(buffer[a] == ','){
                            all++;
                            int index = temp >> 10;//除以1024,用位运算
                            if(index >= record.length){
                                //扩容
                                int[] newRecord = new int[index+1];
                                System.arraycopy(record,0,newRecord,0,record.length);
                                record = newRecord;
                            }
                            record[index]++;
                            temp = 0;
                        }else{
                            int n = buffer[a] - ASCII_0;
                            temp = temp*10+n;//字符串转数字,使用基本类型计算
                        }
                    }
                }
                all++;
                int index = temp >> 10;
                if(index >= record.length){
                    int[] newRecord = new int[index+1];
                    System.arraycopy(record,0,newRecord,0,record.length);
                    record = newRecord;
                }
                record[index]++;
            } catch (Exception e){
                e.printStackTrace();
            }
            int tp90 = (int) (all*0.9d)-1;
            int start = 0;
            int lessThanTp90 = 0;
            while(start < record.length){
                int t = lessThanTp90 + record[start];
                if(t > tp90){
                    break;
                }else{
                    lessThanTp90 = t;
                }
                start++;
            }
            //找到目标所在区间
            int[] targetSection = new int[record[start]];
            int len = 0;
            try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))){
                int i;//第二次读取,因为已经确定了90分位数所在区间,那么只需要记录该区间的值,然后排序即可
                while((i = bis.read(buffer,0,buffer.length)) > 0){
                    for(int a = 0;a<i;a++){
                        if(buffer[a] == ','){
                            int index = temp >> 10;
                            if(index == start ){
                                targetSection[len++]=temp;
                            }
                            temp = 0;
                        }else{
                            int n = buffer[a] - ASCII_0;
                            temp = temp*10+n;
                        }
                    }
                }
                int index = temp >> 10;
                if(index == start ){
                    targetSection[len++]=temp;
                }
            } catch (Exception e){
                e.printStackTrace();
            }
            Arrays.sort(targetSection);
            return targetSection[tp90 - lessThanTp90];
        }
    }
    

    实际效果

    同样的配置,1000万数据大概在300~400ms,内存占用更是小了很多,时间上有大概20倍的提升,空间提升(应该也超过20倍)不考虑,需要注意的是,要根据数据的分布因地制宜,这个算法只是一些优化的思路,也就是说,在一些场景下,自己实现一些比较简陋的类库,结合自身的数据情况,大幅提升应用的性能,毕竟7秒到350毫秒,体验上有云泥之别,而350毫秒到35毫秒,却没有那么明显。

    转载于:https://my.oschina.net/wuxiaofei/blog/3089274

    展开全文
  • 目的:允许用户指定百分位数的箱线图函数箱线图须的值,同时仍使用标准 MATLAB 箱线图选项。 输入:使用与标准“boxplot”命令完全相同的语法,但以百分位值的标量或向量作为二个输入。 data - 与普通箱线图一样...
  • 聚合报告中90% Line涉及到百分位数的概念,属于统计学术语,定义如下: 如果将一组数据从大到小排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组n个观测值按...
  • Jmeter 聚合报告90% line的含义

    千次阅读 2016-09-19 11:01:46
    要想 了解90% line 需要知道百分位数概念。统计学术语,如果将一组数据从大到小排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组n个观测值按数值大小排列如,...
  • 以土地调查地类图斑层...最后计算平均值和第90百分位数,结果如下图所示: 以测试结果来看,在1.5亿条要素量级下,按县分区+全局空间索引总体效率最高。 转载于:https://www.cnblogs.com/6yuhang/p/8275106.html...
  • 一 TP50、TP90、TP99 的概念 1.1 什么是 TP TP 是 Top Percentile 的缩写...如,处于P%位置的值称P百分位数。 1.3 TP50、TP90、TP99 怎么理解 TP50、TP90、TP99 是工程性能指标,以网络请求耗时为例: TP50:表
  • Implementing a Statistical Anomaly Detector in Elasticsearch - Part 3  欢迎来到Elasticsearch...第一部分,我们构造了一个pipeline聚合,它捕获了数百万个数据点,以产生前第90百分位数的“surprise”值...
  • 例如,90% 的 Winsorisation 将查看 5 个百分位数以下的所有数据设置为 5 个百分位数,以及数据高于 95 个百分点设置为 95 个百分点。 温莎估计量通常比他们更标准的离群值更稳健形式,尽管有其他选择,...
  • 首先计算 90百分位数,然后找到该 90百分位数内的所有延迟测量值。 client . query ( 'SELECT percentile(ms, 95) FROM latency' ) . then ( function ( results ) { var percentile = results [ 0 ] ...
  • 空气质量综合指数JAVA算法

    千次阅读 2019-11-07 15:56:18
    要求 参考资料: 名词解释: 臭氧8小时,也称臭氧8...一氧化碳日均值95百分位数浓度: 比如20个数字组成的数列,先从小到大排列,95百分数就是19个数。50百分数就是中位数。 package com.en.utils.util;...
  • 此外,当64x64像素块的方差小于64x64 PU的方差分布的第90百分位数且该90%的百分数小于绝对阈值时,可以禁用16x16 PU搜索以获取平滑区域。 同时,如果当前PU是16×16或8×8时,如果当前PU的方差小于其父级PU的...
  • 目的:本研究旨在确定胎儿运动对MCA搏动指数(PI)的影响,并量化... 如果MCA PI测量值低于5个百分位数,则应在停止胎儿身体和/或呼吸运动后的90秒内再次测量,以最大程度地减少SGA和AGA胎儿对脑保护作用的误报诊断。
  • ProbMinHash –用于(概率)Jaccard相似度的一类局部敏感哈希算法 带有标签的修订版用于生成最终论文中提出的结果,该... 例如,如果停止极限被初始化为该分布的第90百分位数,则即使对于停止极限本来可以无限的第一
  • SQLite Plus:所有缺少SQLite函数 ... median -中位数(第50个百分位数), percentile_25第25个百分点, percentile_75第75个百分点, percentile_90第90个百分点, percentile_95第95个百分点, percentile
  • 【python】numpy库np.percentile详解

    万次阅读 多人点赞 2018-05-05 14:24:06
    在python中计算一个多维数组的任意百分比分位数,此处的百分...#求取a数列第90%分位的数值 np.percentile(a, 90) Out[5]: 90.10000000000001 a = range(101,1,-1) #百分位是从小到大排列 np.percentile(a, 90) Out[...
  • numpy库np.percentile详解

    2019-03-27 23:10:02
    在python中计算一个多维数组的任意百分比分位数,此处的...#求取a数列第90%分位的数值 np.percentile(a, 90) Out[5]: 90.10000000000001 a = range(101,1,-1) #百分位是从小到大排列 np.percentile(a, 90) Out[7]...
  • #求取a数列第90%分位的数值 np.percentile(a, 90) Out[5]: 90.10000000000001 a = range(101,1,-1) #百分位是从小到大排列 np.percentile(a, 90) Out[7]: 91.10000000000001 详看官方文档 numpy.percentile ...
  • 马具-源码

    2021-03-01 17:30:29
    示例:使用statsd将计算第90百分位数和平均值。 线束专为交通流量很大的应用而设计。 检测代码的成本应尽可能接近0。 所有指标均在单独的线程中处理。 主线程将永远不会做比需要的更多的工作。 使用线程可以让您...
  • np.percentile()函数讲解

    2021-03-13 23:48:34
    #求取a数列第90%分位的数值 np.percentile(a, 90) #90.10000000000001 a = range(101,1,-1) #百分位是从小到大排列 np.percentile(a, 90) #a是数组,90是几分位 #91.10000000000001 np.percentile(a,q,axis=None...
  • 在下图中,我们看到技术行业股票的平均净利润率为1.8%,而第90百分位数为16.45%。 程序中使用的评分系统在除去异常值后采用一组值的标准偏差,然后将该数字除以3,该值由图中所示的“更改”值表示,等于4.68。 ...
  • 数据包速率:50、90、95、99个百分位数 协议和IP版本的数据包计数 在窗口中看到的一组源IP和DNS qname的基数 排名前10位的热门游戏:IP,ASN,Geo,DNS qnames,DNS慢速xacts ... 尽管目前DNS和数据包捕获是重点...
  • 南非各省大气模型在季节性模拟合集(降雨和近地表气温)中的传播通过标准偏差(StdDev)的反趋势异常以及第90和第10个百分位数之间的距离( RoP)。 结果表明,在季节尺度上,扩散的度量与远近观测到的全球海表温度...
  • 温度百分位数的未来趋势(包括极端温度)用于评估多哥莫诺盆地日温度分布的变化。 计算了从基线期1961-2010年的温度和极端低温(高温)的变化,以供将来使用(2051-2100)。 该分析表明,在盆地北部,对于正趋势,...

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

第90百分位数