我有一个列表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),这种方式非常慢。
有没有办法加快这个速度?我先尝试对分发列表进行排序然后进行标准搜索,但最糟糕的情况仍然很糟糕。
答案 0 :(得分:0)
查看binning
:使用您的参考分布作为数据集,并将分数作为bin边界。结果将是分布中的值的二进制位,例如:
[[1],[4,3,5],[10]]
现在,您可以获取每个bin的长度(某些binning包与binning列表一起返回)并除以总分布数;这给你增量百分位数:
[0.20, 0.60, 0.20]
从这里,累积金额是微不足道的
[0.20, 0.80, 1.0]
这会让你感动吗?