总结:matlab和pandas求分位数,25和75分位数结果是不一样的,是由于在定位位置时就有区别,后续的线性插值计算逻辑是一样。
一、总结
1.区别点:
在分位值统一为小数的情况下,即0.25、0.75类似0-1之间的值,记为p,样本总数记为n。
matlab求pos的公式总结下来即是:
pandas求pos的公式总结下来即是:
2.共同点
得到pos后,再根据linear 插值计算分位数对应的数值:
如果pos是整数a,则取第a位数值即可,如果pos是小数,则使用linear 插值计算,核心逻辑如下:
二、matlab关于分位数的原理如下:
1.对于n个元素的向量A,prctile基于排序再计算并返回百分位数【注意这里分位数是整数,比如25、75】:
A中已排序的元素被视为第100(0.5/n)、第100(1.5/n),…,第100([i–0.5]/n)个百分位数。其中i是第i位,表示位置。例如:
对于诸如{6,3,2,10,1}的五个元素的数据向量,排序的元素{1,2,3,6,10}分别对应于第10、第30、第50、第70和第90百分位数。
对于诸如{6,3,2,10,8,1}的六个元素的数据向量,排序的元素{1,2,3,6,8,10}分别对应于第(50/6)、(150/6)、(250/6)、第(350/6)、、(450/6)和第(550/6)个百分位数。
2.prctile默认使用“exact”线性插值来计算100(0.5/n)和100([i–0.5]/n)之间的百分比的百分位数
3.prctile将A中元素的最小值或最大值分配给与该范围外的百分比相对应的百分位数。记最小位置数值a1对应的百分位数值是s1,当要求的百分位数小于等于s1时,返回的值都是该最小值a1.
三、pandas计算分位数原理如下:
1.记要求的分位数是p,当p=0.25 0.5 0.75 时,就是在计算四分位数。首先确定p分位数的位置(有两种方法)【注意这里分位数是小数,比如0.25、0.75】:
方法1
方法2(pandas默认使用法二计算pos)
2.默认根据linear 插值计算分位数对应的数值: