将列表中的每个值映射到其不同分布的百分位数

时间:2017-12-01 18:31:36

标签: python statistics distribution

我有一个列表function dirRefresher(){ ajax = new XMLHttpRequest(); ajax.open("POST","directoryScanner.php"); ajax.onreadystatechange = function(){ if(ajax.readyState ==4 & ajax.status == 200){ msg = this.responseText; document.getElementById("file_link_panel").innerText= msg; } } ajax.send(); } setInterval(dirRefresher,1000); 和一个列表scores。我需要将distribution中的每个分数映射到scores中相应的百分位数。

示例:

distribution

操作的结果应为distribution=[4,10,3,5,1] scores = [1,6,11]

Map each list value to its corresponding percentile 这个类似的问题已被提出,但在我的情况下,使用scipy.stats.rankdata是不可能的,因为我需要找到与不同分布相关的每个项目的百分位数。

解决它的自然方法是[20,80,100]但是当[scipy.stats.percentileofscore(distribution,s) for s in scores]scores很大时(每个长度高于大约10,000),这种方式非常慢。

有没有办法加快这个速度?我先尝试对分发列表进行排序然后进行标准搜索,但最糟糕的情况仍然很糟糕。

1 个答案:

答案 0 :(得分:0)

查看binning:使用您的参考分布作为数据集,并将分数作为bin边界。结果将是分布中的值的二进制位,例如:

[[1],[4,3,5],[10]]

现在,您可以获取每个bin的长度(某些binning包与binning列表一起返回)并除以总分布数;这给你增量百分位数:

[0.20, 0.60, 0.20]

从这里,累积金额是微不足道的

[0.20, 0.80, 1.0]

这会让你感动吗?