ThinkStats (13)
昨日のソレ、出る直前に 30min くらいででっち上げた微妙な成果だったんですが、見直してみたいと思います。
つうかこれで良いのかな。
def Percentile(scores, percentile_rank): n = 0 for i in scores: minValue = i minIndex = n nextN = n + 1 for j in scores[n + 1:]: if j < minValue: minIndex = nextN minValue = j nextN += 1 tmp = scores[n] scores[n] = scores[minIndex] scores[minIndex] = tmp if 100.0 * (n + 1) / len(scores) >= percentile_rank: return i n += 1
これでさらに不要なループが、なんですが汚いな。とりあえずここまで修正。
def swap(list, x, y): tmp = list[x] list[x] = list[y] list[y] = tmp def Percentile(scores, percentile_rank): n = 0 for i in scores: minValue = i minIndex = n nextN = n + 1 for j in scores[n + 1:]: if j < minValue: minIndex = nextN minValue = j nextN += 1 swap(scores, n, minIndex) if 100.0 * (n + 1) / len(scores) >= percentile_rank: return i n += 1 def main(): print Percentile([55, 57, 66, 77, 88], 60) if __name__ == '__main__': main()
乱数云々な部分も面白いので元気ならヤッてみるかも。
演習問題 3-9
ええと
Cdf と整数 n を受け取り、その Cdf からランダムに選ばれた n 個の値を返す Sample という関数を書いて下さい。
Think Stats より引用
とのこと。Cdf.py なソレを書き換えてみるとこんなカンジになるのかな。
def Sample(Cdf, n): return [Cdf.Random() for i in range(n)]
range という手続きはすばらですね。
明日は
ワープロ打ちが中心になるので気分転換にこちら対応の方向です。。