2017-12-01 7 views
1

私はリストscoresとリストdistributionを持っています。 scoresの各スコアを対応するパーセンタイルがdistributionになるようにマップする必要があります。リストの各値を異なる分布のパーセンタイルにマッピングする

例:

distribution=[4,10,3,5,1] 
scores = [1,6,11] 

演算の結果がscipy.stats.rankdataの使用があるため不可能です作り、[20,80,100]

Map each list value to its corresponding percentileこれと同様の質問がされてい が、私の場合にする必要があります私は、異なる分布に関連して各項目のパーセンタイルを見つける必要があります。

それを解決する自然な方法は[scipy.stats.percentileofscore(distribution,s) for s in scores]ですが、scoresまたはdistributionが大きい場合(それぞれ約10,000以上の長さ)の場合は非常に遅いです。

これを大幅にスピードアップする方法はありますか?私は配布リストを最初にソートしてから標準検索を試みましたが、最悪の場合はまだかなり悪いです。

答えて

0

binningを参照してください。データセットとして参照分布を使用し、ビン境界としてスコアを使用します。

[1]、[4、3、5]、[10]

これで、各ビンの長さ(いくつかを取る:結果は、次のような分布からの値のビンが、あろうビニングパッケージはビニングリストとともに返されます)。ここからは、累積合計は、あなたが移動を取得

[0.20, 0.80, 1.0] 

ん自明である

[0.20, 0.60, 0.20] 

:これはインクリメンタルパーセンタイルあなたに与えますか?

関連する問題