Python > 言語 > データ型 > 数値型 > 乱数


Python - 言語 - データ型 - 数値型 - 乱数

*

*



乱数

概要

[ edit ]

  • randomモジュールをインポートする
    • import random

  • 擬似乱数列生成器
    • メルセンヌツイスタ https://ja.wikipedia.org/wiki/メルセンヌ・ツイスタ

      • M系列をベースに発明者は松本眞先生(現在,広島大学)と西村拓士先生(現在,山形大学)
      • 53 ビット精度のfloatを高速に生成する.疑似乱数であり周期があるが,2**19937-1 であり,十分に長い

乱数の生成

[ edit ]

  • 整数乱数
    生成

    random.randint(start, stop)

    start <= n <= stopであるランダムな整数nを返す.
    randrange(start, stop+1)と等価

    random.randrange(start, stop, step)

    range(start, stop, step)の要素からランダムに選ばれた要素を返す.
    range()関数と同様に,start, stepは省略可能

    乱数の種の
    設定

    random.seed(x)

    乱数の種(シード)を指定する.
    これを特定の値に設定すると
    同じ(疑似)乱数列が得られる

    実数乱数
    生成

    random.random()

    0.0~1.0までのfloat値を返す.範囲は,範囲は [0.0, 1.0)

    random.uniform(start, stop)

    start~stopのfloat値(一様乱数)を返す.
    端点stopが範囲に含まれるか否かは,start + (stop-start) * random()の
    float丸めに依存してきまる

    列演算

    random.choice( seq )

    シーケンスseq(リストや文字列)から一つの要素を返す

    列更新

    random.shuffle( seq )

    変更可能(ミュータブル)なシーケンスseq(リスト)の
    要素をシャッフルする.
    文字列は変更不能(イミュータブル)なので,使用できない

  • random.randint(a,b)と書くとbを含み,randrange(a, b)と書くとbを含まないことに注意.

使い方の例

[ edit ]

整数乱数生成

>>> import random
>>> random.seed( 0 )

>>> random.randint( 0, 9 )
6
>>> random.randint( 0, 9 )
6
>>> random.randint( 0, 9 )
0
>>> random.randint( 0, 9 )
4
>>> random.randint( 0, 9 )
8
>>> random.randint( 0, 9 )
7
>>> random.randint( 0, 9 )
6
>>> random.randint( 0, 9 )
4


>>> random.seed( 0 )
>>> random.randint( 0, 9 )
6
>>> random.randint( 0, 9 )
6
>>> random.randint( 0, 9 )
0
>>> random.randint( 0, 9 )
4
>>> random.randint( 0, 9 )
8
>>> random.randint( 0, 9 )
7
>>> random.randint( 0, 9 )
6
>>> random.randint( 0, 9 )
4

>>> random.seed( 1 )
>>> random.randint( 0, 9 )
2
>>> random.randint( 0, 9 )
9
>>> random.randint( 0, 9 )
1
>>> random.randint( 0, 9 )
4
>>> random.randint( 0, 9 )
1
>>> random.randint( 0, 9 )
7
>>> random.randint( 0, 9 )
7
>>> random.randint( 0, 9 )
7

乱数のシード(種)の設定

>>> import random
>>> import time

>>> random.seed( time.time() )
>>> random.randint( 0, 9 )
4
>>> random.randint( 0, 9 )
3
>>> random.randint( 0, 9 )
5
>>> random.randint( 0, 9 )
3
>>> random.randint( 0, 9 )
1

>>> random.seed( time.time() )
>>> random.randint( 0, 9 )
7
>>> random.randint( 0, 9 )
0
>>> random.randint( 0, 9 )
1
>>> random.randint( 0, 9 )
7
>>> random.randint( 0, 9 )
6

実数乱数生成

>>> import random
>>> random.seed( 0 )

>>> random.random()
0.8444218515250481
>>> random.random()
0.7579544029403025
>>> random.random()
0.420571580830845
>>> random.random()
0.25891675029296335
>>> random.random()
0.5112747213686085
>>> random.random()
0.4049341374504143

>>> random.seed( 0 )
>>> random.random()
0.8444218515250481
>>> random.random()
0.7579544029403025
>>> random.random()
0.420571580830845
>>> random.random()
0.25891675029296335
>>> random.random()
0.5112747213686085
>>> random.random()
0.4049341374504143

列演算

>>> import random
>>> x = ["a","b","c","d","e","f" ]
>>> random.seed( 0 )

>>> random.choice( x )
'd'
>>> random.choice( x )
'd'
>>> random.choice( x )
'a'
>>> random.choice( x )
'c'
>>> random.choice( x )
'e'
>>> random.choice( x )

>>> import random
>>> x = "abcdef"
>>> random.seed( 0 )

>>> random.choice( x )
'd'
>>> random.choice( x )
'd'
>>> random.choice( x )
'a'
>>> random.choice( x )
'c'
>>> random.choice( x )
'e'

列更新

>>> import random
>>> random.seed( 0 )
>>> x = ["a","b","c","d","e","f" ]

>>> random.shuffle( x )
>>> x
['e', 'c', 'b', 'a', 'f', 'd']

>>> random.shuffle( x )
>>> x
['f', 'e', 'c', 'd', 'b', 'a']

>>> random.shuffle( x )
>>> x
['a', 'd', 'f', 'c', 'e', 'b']

  • 文字列には適用できない

>>> random.shuffle( "abcdef" )

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "P:\0\Conda\lib\random.py", line 275, in shuffle
    x[i], x[j] = x[j], x[i]
TypeError: 'str' object does not support item assignment
  • リストをシャッフルして,区切り文字""で連結すれば,文字列のシャッフルのようなことができる

>>> import random
>>> random.seed( 0 )
>>> s = "abcdef"
>>> x = [ c for c in s ]
>>> x
['a', 'b', 'c', 'd', 'e', 'f']

>>> random.shuffle( x )
>>> "".join(x)
'ecbafd'

>>> random.shuffle( x )
>>> "".join(x)
'fecdba'

>>> random.shuffle( x )
>>> "".join(x)
'adfceb'

>>> random.shuffle( x )
>>> "".join(x)
'bacdfe'

*

リファレンス

*



Software Engineering(IIJIMA, Tadashi -- Keio Univ.)



*

SoftEng: Python/Lang/DataType/Numeric/Random (last edited 2018-10-04 08:25:45 by TadashiIijima)