У меня есть несколько очень больших списков, с которыми я работаю (> 1M строк), и я пытаюсь найти быстрый (самый быстрый?) способ, учитывая поплавок, ранжировать этот поплавок по сравнению со списком поплавков и найти его процент ранга по сравнению с диапазоном списка. Вот моя попытка, но она очень медленная:
X =[0.595068426145485,
0.613726840488019,
1.1532608695652,
1.92952380952385,
4.44137931034496,
3.46432160804035,
2.20331487122673,
2.54736842105265,
3.57702702702689,
1.93202764976956,
1.34720184204056,
0.824997304105564,
0.765782842381996,
0.615110856990126,
0.622708022872803,
1.03211045820975,
0.997225012974318,
0.496352327702226,
0.67103858866700,
0.452224068868272,
0.441842124852685,
0.447584524952608,
0.4645525042246]
val = 1.5
arr = np.array(X) #X is actually a pandas column, hence the conversion
arr = np.insert(arr,1,val, axis=None) #insert the val into arr, to then be ranked
st = np.sort(arr)
RANK = float([i for i,k in enumerate(st) if k == val][0])+1 #Find position
PCNT_RANK = (1-(1-round(RANK/len(st),6)))*100 #Find percentage of value compared to range
print RANK, PCNT_RANK
>>> 17.0 70.8333
Для процентных рангов я, вероятно, мог бы построить дистрибутив и образец из него, пока не совсем уверен, любые предложения приветствуются ... он будет интенсивно использоваться, поэтому любое ускорение будет выгодно.
Спасибо.
bisect
module оказывается на удивление полезным. Реализация ранга в ответе @tzaman в Как мне ранжировать список в ванильном Python? может быть хорошей основой, особенно. если чаще нужно ранжировать по сравнению с той же большой последовательностью. - person Dilettant   schedule 17.06.2016