我正在尝试使用Apache Commons Math3库和Percentile类来获取分配中特定数字的百分位数:
https://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math3/stat/descriptive/rank/Percentile.html
(我在Scala中正在使用它)
如果我做:new Percentile().evaluate(Array(1,2,3,4,5), 80)
然后我拿回4
。但是,我想朝另一个方向发展,将4
作为输入,并返回80
作为结果,即给定数字的百分位数,而不是给定百分比的数字。
此类上的任何方法似乎都不适合我想要的结果。我在滥用类(class)吗?我应该使用另一门课吗?
最佳答案
您可以使用随基线值加载的EmpiricalDistribution:
@Test
public void testCalculatePercentile() {
//given
double[] values = new double[]{1,2,3,4,5};
EmpiricalDistribution distribution = new EmpiricalDistribution(values.length);
distribution.load(values);
//when
double percentile = distribution.cumulativeProbability(4);
//then
assertThat(percentile).isEqualTo(0.8);
}