Find percentile corresponding to an input value
25 次查看(过去 30 天)
显示 更早的评论
I'm trying to find a MATLAB function that is similar to the PERCENTRANK formula in Excel. With this formula you enter an array and a scalar and it tells you what percentile that scalar corresponds to.
0 个评论
采纳的回答
Walter Roberson
2017-7-8
PERCENTRANK = @(YourArray, TheProbes) reshape( mean( bsxfun(@le, YourArray(:), TheProbes(:).') ) * 100, size(TheProbes) )
This accepts a vector or array of data, and an array of probe positions (could be a scalar), and returns an array of percentiles the same size as the probe positions, considered over the entire content of the data array (not per row or per column)
3 个评论
Wenersamy de Alcantara
2020-5-11
编辑:Wenersamy de Alcantara
2020-5-11
Hi, Alex, the algorithm of the suggested PERCENTRANK function basically averages the result of a logical comparison.
For example, in the vector (6 numbers drawn from a discrete uniform distribution):
[23 45 98 2 81 17]
If you compare it with, say, 30: [23 45 98 2 81 17] <= 30, you'll have:
[1 0 0 1 0 1]
If you avarage the results of the comparison, you'll have:
3/6 = 0.5 or 50% percentile.
Of course, the approximation gets better with a bigger sample.
In other words, you can implement excel function PERCENTRANK.INC(matrix,k) by just using: mean(matrix<=k).
Note that they are not exactly the same algorithm, but they get closer as the size of "matrix" increases.
Miguel Lovino
2020-6-22
Hi Walter,
this code works perfectly for a vector (lat - lon -time varying). I want to adapt it to an array array of 121 * 121 * 2995 (it's lat-lon -time). That is, for a given lat-lon, it works. I try to rewrite as:
A = ncread('ERA5_pentads_sm_l123_1979-2019.nc','sm');
B = ncread('ERA5_pentads_sm_l123_1979-2019.nc','sm');
[n,m,t]=size(A);
As = zeros(n,m,t);
for ii=1:n
for jj=1:m
PER = @(A,B) reshape( mean( bsxfun(@le, A(ii,jj,:), ipermute(A(ii,jj,:),[3 2 1])))...
* 100, t, []);
As (ii,jj,:)= PER (A);
end
end
It works, but it seems that lat-lon points are not correct.
I really appreciate some help,
Best
Miguel
更多回答(1 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!