2013/04/04

ライブラリ:random

Pythonの「random」というライブラリについてご紹介します。

import random

「random」は、乱数に関係したライブラリです。標準ライブラリのひとつで、Pythonをインストールするとデフォルトで入っています。

0から1の間の浮動少数点数を返すrandom()をベースに、整数を返す関数、与えられた任意のリストの中からひとつを抽出する関数など乱数関連の関数が豊富に用意されています。

以下ではその中からいくつかピックアップしてご紹介します。

random.random()
random()は、0.0から1.0の間の浮動小数点数を返します。厳密には区間[0.0, 1.0)、つまり、0ちょうどを含む「0以上」から1ちょうどを含まない「1未満」までの数を返します。

random.randrange(start, stop)
randrange()は、startからstopまでの整数の中からランダムにひとつを返します。forループでよく使うrange(start, stop)と同じように、startそのものは含みますが、stopそのものは含みません。つまり、「start、start+1、start+2、...、stop-1」の合計「stop-start」個の整数が抽出対象の集合となります。

random.randint(a, b)
こちらもrandrange()と同じく、整数をランダムに選んで返す関数です。randrange()とのちがいは、上限の値を含むかかどうか、のちがいです。randint(a, b)の場合は、a、bの値をともに含みます。数学的に書けば、「integer n s.t a <= n <= b」となります。

random.choice([リスト])
choice()は、与えたリストの要素からひとつ、ランダムにピックアップして返します。リストだけでなく、文字列、タプルなど、シーケンス型の変数であれば引数に取ることができます。

random.choice([1, 2, 3, 4])  # たとえば3
random.choice(mydict.items())  # items()などと組み合わせれば辞書の要素もランダムで選べます

random.sample([リスト], [整数])
choice()がひとつだけ値を取り出すのに対し、sample()は複数の要素を重複なく取り出してくれる関数です。もしもとのリストで要素が重複していた場合は、重複分だけその要素を取り出す確率が高くなります。

この関数を使えば、たとえば、高校数学で習った組み合わせの問題の「袋に7コの玉が入っています。赤い玉が4つ、白い玉が3つ、その中から3つ取り出したときの・・・」なんてシミュレーションも

random.sample(['r', 'r', 'r', 'r', 'w', 'w', 'w'], 3)  # ['w', 'r', 'w']など

という風に簡単に実現できます。

私は実際に使ったことはありませんが、一様分布だけでなく、正規分布、三角分布、ガウス分布など異なる分布をもつランダム値を扱う関数なんかも用意されています。


インストール
「random」は標準ライブラリに含まれているので、Pythonと別途インストールする必要はありません。


参考
random - Python公式ドキュメント

0 件のコメント: