prctile
数据集的百分位数
语法
描述
返回数据向量或数组中元素的百分位数Y
= prctile (X
,p
)X
的百分比p
在区间[0,100]中。
如果
X
是向量吗Y
与所请求的百分位数数量长度相同的标量或向量(长度(p)
).Y(我)
包含了p(我)
百分位。如果
X
是矩阵吗Y
是行向量还是矩阵,其中的行数是多少Y
等于所请求的百分位数(长度(p)
).的我
th排Y
包含了p(我)
的每列的百分位数X
.为多维数组,
prctile
沿着第一个nonsingleton维度的X
.
例子
数据向量的百分位数
生成一个大小为10的数据集。
rng (“默认”);%的再现性x = normrnd(5、2、1,10)
x =1×106.0753 8.6678 0.4823 6.7243 5.6375 2.3846 4.1328 5.6852 12.1568 10.5389
计算第42百分位。
Y = prctile (x, 42)
Y = 5.6709
所有值的百分位数
找出数组中所有值的百分位数。
创建一个3 × 5 × 2的数组X
.
X =重塑(1:30,[3 5 2])
X = X(:,:,1) = 14 7 10 13 25 8 11 14 3 6 9 12 15 X(:,:,2) = 16 19 22 25 28 17 20 23 26 29 18 21 24 27 30
找出元素的第40百分位和第60百分位X
.
Y = prctile(X,[40 60],“所有”)
Y =2×112.5000 - 18.5000
Y (1)
是第40百分位吗X
,Y (2)
的第60百分位X
.
数据矩阵的百分位数
沿着数据矩阵的列和行计算指定百分比的百分比。
生成一个5乘5的数据矩阵。
X = (1:5) * (2:6)
X =5×52 3 4 5 6 4 6 8 10 12 6 9 12 15 18 8 12 16 20 24 10 15 20 25 30
的列计算第25、50和75个百分位X
.
Y = prctile(X,[25 50 75],1)
Y =3×53.5000 5.2500 7.0000 8.7500 10.5000 6.0000 9.0000 12.0000 15.0000 18.0000 8.5000 12.7500 17.0000 21.2500 25.5000
的行Y
的列的百分位对应X
.例如,第25百分位,第50百分位和第75百分位的第三列X
元素(4、8、12、16、20)分别为7、12和17。Y = prctile(X,[25 50 75])
返回相同的百分位矩阵。
计算第25、50和75个百分位X
.
Y = prctile(X,[25 50 75],2)
Y =5×32.7500 4.0000 5.2500 5.5000 8.2500 12.0000 15.7500 11.0000 16.0000 21.0000 13.7500 20.0000 26.2500
的行Y
的行百分位对应X
.例如,第一行的第25、50和75个百分位X
元素(2、3、4、5、6)分别为2.75、4和5.25。
多维数组的百分位数
同时沿着多个维度找到多维数组的百分位。
创建一个3 × 5 × 2的数组X
.
X =重塑(1:30,[3 5 2])
X = X(:,:,1) = 14 7 10 13 25 8 11 14 3 6 9 12 15 X(:,:,2) = 16 19 22 25 28 17 20 23 26 29 18 21 24 27 30
计算每一页的第40和第60百分位X
通过指定尺寸1和2作为操作尺寸。
Ypage = prctile(X,[40 60],[1 2])
9.5000 Ypage(:,:,1) = 21.5000 24.5000
例如,Ypage (1, 1, 1)
第一页的第40百分位X
,Ypage (2, 1, 1)
第一页的第60百分位X
.
计算每个元素的第40和第60百分位X(:,我,:)
通过指定尺寸1和3作为操作尺寸进行切片。
Ycol = prctile(X,[40 60],[1 3])
Ycol =2×52.9000 5.9000 8.9000 11.9000 14.9000 16.1000 19.1000 22.1000 25.1000 28.1000
例如,Ycol(1、4)
第40百分位的元素在里面吗X (: 4:)
,Ycol(2、4)
第60百分位的元素在里面吗X (: 4:)
.
给定百分比的高向量百分比
计算给定百分比的高列向量的精确和近似百分比。
当您在高数组上执行计算时,MATLAB®使用并行池(如果您有并行计算工具箱™则默认)或本地MATLAB会话。如果在拥有并行计算工具箱的情况下,希望使用本地MATLAB会话运行示例,则可以通过使用mapreduce
函数。
对象的数据存储airlinesmall
数据集。治疗“NA”
值作为缺失的数据,因此数据存储
取代他们南
值。指定使用ArrTime
变量。
ds =数据存储(“airlinesmall.csv”,“TreatAsMissing”,“NA”,...“SelectedVariableNames”,“ArrTime”);
在数据存储上创建一个高表,并将数据从高表提取到一个高向量中。
t =高(ds)%高表
使用“本地”配置文件启动并行池(parpool)…连接到并行池(工人数量:4). t = Mx1高表ArrTime _______ 735 1124 2218 1431 746 1547 1052 1134::
x = t {:,:}%高矢量
x = Mx1高双列向量735 1124 2218 1431 746 1547 1052 1134::
精确计算百分之五十x
.因为x
高列向量和p
是一个标量,prctile
默认情况下返回精确的百分位值。
p = 50;yExact = prctile (x, p)
yExact =高双?
计算x的大约第50百分位。指定“方法”,“近似”
使用一种近似算法T-Digest用于计算百分位数。
yApprox = prctile (x p“方法”,“近似”)
yApprox = MxNx……高双数组???...???...? ? ? ... : : : : : :
对高数组求值并将结果存入内存收集
.
[yExact, yApprox] =收集(yExact yApprox)
使用并行池“local”计算高表达式:-通过1 / 4:在6.4秒内完成-通过2 / 4:在1.3秒内完成-通过3 / 4:在2.1秒内完成-通过4:在1.7秒内完成评估在15秒内完成
yExact = 1522
yApprox = 1.5220 e + 03
近似百分位数和精确百分位数的值与所示的四位数字相同。
高矩阵沿不同维度的百分位数
计算一个高矩阵的精确和近似百分比,得到不同维度上的特定百分比。
当您在高数组上执行计算时,MATLAB®使用并行池(如果您有并行计算工具箱™则默认)或本地MATLAB会话。如果在拥有并行计算工具箱的情况下,希望使用本地MATLAB会话运行示例,则可以通过使用mapreduce
函数。
创建一个高大的矩阵X
控件中的变量子集airlinesmall
数据集。看到给定百分比的高向量百分比有关从高数组中提取数据的步骤的详细信息。
varnames = {“ArrDelay”,“ArrTime”,“DepTime”,“ActualElapsedTime”};%数据集中变量的子集ds =数据存储(“airlinesmall.csv”,“TreatAsMissing”,“NA”,...“SelectedVariableNames”, varnames);%数据存储t =高(ds);%高表
使用“本地”配置文件启动并行池(parpool)…连接到并行池(工人数量:4)。
X = t {:, varnames}%高矩阵
X = Mx4高双矩阵8 735 642 53 8 1124 1021 63 21 2218 2055 83 13 1431 1332 59 4 746 629 77 59 1547 1446 61 3 1052 928 84 11 1134 859 155::::::::
如果沿着非1的维度操作,则prctile
函数只计算精确的百分比,因此它可以使用基于排序的算法高效地执行计算算法)而不是基于的近似算法T-Digest.
计算25百分位,50百分位和75百分位X
沿着第二个维度。
P = [25 50 75];百分比向量Yexact = prctile (X p 2)
Yexact = MxNx……高双数组???...???...? ? ? ... : : : : : :
当函数在第一个维度和p
是百分比的向量,您必须使用基于t摘要的近似算法来计算百分比。使用基于排序的算法沿着高数组的第一个维度找到百分位是计算量很大的。
计算大约第25、50和75个百分位X
沿着第一个维度。因为默认维度是1,所以不需要为的指定值昏暗的
.
Yapprox = prctile (X p“方法”,“近似”)
Yapprox = MxNx……高双数组???...???...? ? ? ... : : : : : :
对高数组求值并将结果存入内存收集
.
[Yexact, Yapprox] =收集(Yexact Yapprox);
使用并行池“local”计算高表达式:-通过1 / 1:在6.5秒内完成计算,在8.6秒内完成
显示第25百分位、第50百分位和第75百分位的前五行X
.
: Yexact (1:5)
ans =5×3103.× 0.0305 0.3475 0.6885 0.0355 0.5420 1.0725 0.0520 1.0690 2.1365 0.0360 0.6955 1.3815 0.0405 0.3530 0.6875
矩阵的每一行Yexact
中对应行的三个百分位X
.例如,30.5
,347.5
,688.5
第一行的第25百分位、第50百分位和第75百分位在吗X
.
显示大约第25,50,和75个百分位X
沿着第一个维度。
Yapprox
Yapprox =3×4103.× -0.0070 1.1149 0.9322 0.0700 0 1.5220 1.3350 0.1020 0.0110 1.9180 1.7400 0.1510
矩阵的每一列Yapprox
对应于矩阵每一列的三个百分位X
.例如,的第一列Yapprox
的元素(- 7,0,11)包含的第一列的百分位数X
.
输入参数
X
- - - - - -输入数据
向量|数组
输入数据,指定为向量或数组。
数据类型:双
|单
p
- - - - - -百分比
标量|向量
要为其计算百分位数的百分比,指定为从0到100的标量或标量向量。
例子:25
例子:(25、50、75)
数据类型:双
|单
昏暗的
- - - - - -维
正整数
的百分位沿此方向的尺寸X
请求,指定为正整数。例如,对于一个矩阵X
,当昏暗的
= 1,prctile
的列的百分位X
;当昏暗的
= 2,prctile
的行的百分位X
.对于多维数组X
的长度昏暗的
th尺寸Y
等于的长度p
.
数据类型:双
|单
vecdim
- - - - - -向量的维度
正整数向量
输出参数
Y
——百分位数
标量|数组
数据向量或数组的百分比,作为一个或多个百分比值的标量或数组返回。
如果
X
是向量吗Y
与所请求的百分位数数量长度相同的标量或向量(长度(p)
).Y(我)
包含了p(我)
百分位。如果
X
数组是维数吗d,然后Y
是一个数组,其最小操作维的长度等于所请求的百分位数(长度(p)
).
更多关于
多维数组
一个多维数组是具有两个以上维度的数组。例如,如果X是一个1 × 3 × 4的数组,那么X就是一个3-D数组。
Nonsingleton维度
一个nonsingleton维度的值是其大小不等于1的维数。一个第一个nonsingleton维度是满足非单例条件的第一个维度。例如,如果X
是1 × 1 × 2 × 4数组,那么第三维是的第一个非单维X
.
线性插值
线性插值用线性多项式来求y我= f (x我),表示基础函数的值Y= f (X)在向量或数组中的点上x.给定数据点(x1,y1)和(x2,y2),y1= f (x1),y2= f (x2),线性插值发现y= f (x)对于一个给定的x之间的x1而且x2如下:
类似地,如果100(1.5/n) th百分位y1.5 /n100 (2.5 /n) th百分位y2.5 /n,则线性插值得到100(2.3/n) th百分位,y2.3 /n为:
T-Digest
T-digest[2]是一种概率数据结构,它是数据集经验累积分布函数(CDF)的稀疏表示。t -摘要用于从在线或分布式数据中计算基于排名的统计信息(如百分位数和分位数)的近近值,这种近近值允许控制精度,特别是接近数据分布的尾部。
对于分布在不同分区中的数据,t-digest分别计算每个数据分区的分位数估计(和百分位估计),然后在保持恒定的内存边界和恒定的计算相对精度( 为问分位数)。由于这些原因,t-digest对于处理高数组非常实用。
要估计分布在不同分区中的数组的分位数,首先在数据的每个分区中构建一个t摘要。t摘要对分区中的数据进行聚类,并通过质心值和表示对聚类有贡献的样本数量的累积权重对每个聚类进行总结。T-digest使用大的聚类(间距很大的质心)来表示CDF附近的区域问= 0.5
并使用小簇(紧密间隔的质心)来表示CDF附近的区域问= 0
或问= 1
.
T-digest通过使用映射分位数的缩放函数来控制簇的大小问一个索引k带有压缩参数的 .也就是说,
的映射k是否具有最小值的单调性k(0,δ) = 0和最大价值k(1,δ) =δ.的伸缩函数δ= 10.
缩放函数转换分位数问缩放因子k为了给可变大小的步骤问.因此,簇的大小是不相等的(在中心分位数周围较大,而在附近较小问= 0
或问= 1
).簇越小,数据边缘的精确度越高。
要用一个具有权重和位置的新观察值更新t摘要,请找到离新观察值最近的集群。然后,添加权重,并根据加权平均更新聚类的质心,前提是更新后的聚类权重不超过大小限制。
通过取t-摘要的并集并其中心,可以组合来自数据每个分区的独立t-摘要。要组合t-摘要,首先从所有独立的t-摘要中按簇权重递减顺序对簇进行排序。然后,当邻近的集群满足大小限制时,合并它们,形成一个新的t摘要。
一旦形成了表示完整数据集的t摘要,就可以估计t摘要中每个聚类的端点(或边界),然后使用每个聚类端点之间的插值来查找精确的分位数估计。
算法
对于一个n元向量X
,prctile
使用基于排序的算法返回百分位数,如下所示:
排序后的元素
X
取100(0.5/n), 100 (1.5 /n),…100 ([n- 0.5) /n)百分位数。例如:对于由{6,3,2,10,1}等五个元素组成的数据向量,排序后的元素{1,2,3,6,10}分别对应第10、30、50、70和90个百分位。
对于包含6个元素(如{6,3,2,10,8,1})的数据向量,排序后的元素{1,2,3,6,8,10}分别对应于(50/6)第(150/6)第(250/6)第(350/6)第(450/6)第(550/6)个百分位。
prctile
使用线性插值计算100(0.5/。)之间百分比的百分位数n)和100年((n- 0.5) /n).prctile
中元素的最小或最大值X
与这个范围之外的百分比相对应的百分比。
prctile
对待南
S作为缺失的值并删除它们。
扩展功能
高大的数组
使用行数超过内存容量的数组进行计算。
使用注意事项和限制:
Y = prctile (X, p)
返回精确的百分位数(使用基于排序的算法)只有X
是一个高列向量。Y = prctile (X p暗)
返回精确的百分位数一个在这些条件中:X
是一个高列向量。X
是高数组和昏暗的
不是1
.例如,prctile (X, p, 2)
沿着高数组的行返回精确的百分位数X
.
如果
X
是高数组和昏暗的
是1
,那么您必须指定“方法”,“近似”
使用一种近似算法T-Digest用于计算百分位数。例如,prctile (X, p, 1,“方法”,“近似”)
沿高数组的列返回近似的百分比X
.Y = prctile (X p vecdim)
返回精确的百分位数一个在这些条件中:X
是一个高列向量。X
是高数组和vecdim
不包括1
.例如,如果X
是3 × 5 × 2的数组吗prctile (X p[2、3])
返回每个元素的精确百分位数X(我::)
片。X
是高数组和vecdim
包括1
和所有的nonsingleton维度的X
.例如,如果X
是一个10 × 1 × 4的数组吗prctile (X p [3] 1)
返回元素的精确百分位数X (: 1:)
.
如果
X
是高数组和vecdim
包括1
的所有非单例维度X
,那么您必须指定“方法”,“近似”
使用近似算法。例如,如果X
是10 × 1 × 4的数组,可以用吗prctile (X p[1 - 2],“方法”,“近似”)
每一页的大概百分比X
.
有关更多信息,请参见高大的数组(MATLAB)。
C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
的
“所有”
而且vecdim
不支持输入参数。金宝app的
“方法”
不支持名称-值对参数。金宝app的
昏暗的
输入实参必须是编译时常量。如果不指定
昏暗的
输入参数时,生成的代码中的工作(或操作)维度可以不同。因此,可能会出现运行时错误。有关更多细节,请参见自动尺寸限制(MATLAB编码器)。如果输出
Y
是向量的方向吗Y
不同于MATLAB®当以下所有条件都成立时:你不供应
昏暗的
.X
是一个可变大小的数组,而不是一个可变大小的向量,在编译时,但是X
是运行时的向量。向量的方向
X
与向量的方向不匹配p
.
在本例中,输出
Y
匹配的方向X
,而不是方向p
.
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
之前介绍过的R2006a
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。