回答:
試してください:
from random import randrange
print(randrange(10))
詳細:http : //docs.python.org/library/random.html#random.randrange
secrets
より良い乱数のためにモジュールを使用してください。リファレンス:docs.python.org/3/library/random.html
import random
print(random.randint(0,9))
random.randint(a, b)
a <= N <= bとなるようなランダムな整数Nを返します。
ドキュメント:https : //docs.python.org/3.1/library/random.html#random.randint
randint(0,9)
9を返すことはありません)。これはオンラインマニュアルには反映されていませんが、組み込みのヘルプには記載されています。
このsecrets
モジュールはPython 3.6の新機能です。これはrandom
、暗号化またはセキュリティ用途のモジュールよりも優れています。
0から9までの範囲の整数をランダムに出力するには、次のように入力します。
from secrets import randbelow
print(randbelow(10))
詳細については、PEP 506を参照してください。
配列のサイズを選択します(この例では、サイズを20に選択しています)。次に、以下を使用します。
import numpy as np
np.random.randint(10, size=(1, 20))
次の形式の出力が表示されることが期待できます(実行するたびに異なるランダムな整数が返されます。したがって、出力配列の整数は以下の例とは異なることが予想されます)。
array([[1, 6, 1, 2, 8, 6, 3, 3, 2, 5, 6, 5, 0, 9, 5, 6, 4, 5, 9, 3]])
これを試してみてください random.shuffle
>>> import random
>>> nums = range(10)
>>> random.shuffle(nums)
>>> nums
[6, 3, 5, 4, 0, 1, 2, 9, 8, 7]
次のいずれかを試します。
import numpy as np
X1 = np.random.randint(low=0, high=10, size=(15,))
print (X1)
>>> array([3, 0, 9, 0, 5, 7, 6, 9, 6, 7, 9, 6, 6, 9, 8])
import numpy as np
X2 = np.random.uniform(low=0, high=10, size=(15,)).astype(int)
print (X2)
>>> array([8, 3, 6, 9, 1, 0, 3, 6, 3, 3, 1, 2, 4, 0, 4])
3.> random.randrange
from random import randrange
X3 = [randrange(10) for i in range(15)]
print (X3)
>>> [2, 1, 4, 1, 2, 8, 8, 6, 4, 1, 0, 5, 8, 3, 5]
4.> random.randint
from random import randint
X4 = [randint(0, 9) for i in range(0, 15)]
print (X4)
>>> [6, 2, 6, 9, 5, 3, 2, 3, 3, 4, 4, 7, 4, 9, 6]
速度:
► np.random.randintがある最速に続く、np.random.uniformとrandom.randrange。random.randintが最も遅いです。
►np.random.randintとnp.random.uniformは、どちらもrandom.randrangeとrandom.randintよりもはるかに高速です(約8〜12倍高速)。
%timeit np.random.randint(low=0, high=10, size=(15,))
>> 1.64 µs ± 7.83 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit np.random.uniform(low=0, high=10, size=(15,)).astype(int)
>> 2.15 µs ± 38.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit [randrange(10) for i in range(15)]
>> 12.9 µs ± 60.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit [randint(0, 9) for i in range(0, 15)]
>> 20 µs ± 386 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
ノート:
1.> np.random.randintは、半開区間[低、高)にわたってランダムな整数を生成します。
2.> np.random.uniformは、半開区間[低、高)にわたって均一に分散された数値を生成します。
3.> random.randrange(stop)は、range(start、stop、step)から乱数を生成します。
4.> random.randint(a、b)は <= N <= bのようなランダムな整数Nを返します。
5.> astype(int)は、numpy配列をintデータ型にキャストします。
6.>サイズ=(15、)を選択しました。これにより、長さ= 15の派手な配列が得られます。
%timeit
あなたの環境ではどのように機能しますか?
連続した数値の場合、randint
またはrandrange
おそらく最良の選択ですが、シーケンスに複数の異なる値(つまりlist
)がある場合は、次のように使用することもできますchoice
。
>>> import random
>>> values = list(range(10))
>>> random.choice(values)
5
choice
非連続サンプルの1つのアイテムでも機能します。
>>> values = [1, 2, 3, 5, 7, 10]
>>> random.choice(values)
7
「暗号的に強力」が必要な場合はsecrets.choice
、Python 3.6以降にもあります。
>>> import secrets
>>> values = list(range(10))
>>> secrets.choice(values)
2
random.sample
。置換を使用すると、次のように内包表記を使用できますchoice
。たとえば、置換された3つのランダムな値を含むリストの場合:[choice(values) for _ in range(3)]
多くの投稿は1つのランダムな整数を取得する方法を示していますが、元の質問はランダムな整数s(複数)を生成する方法を尋ねています。
Pythonで0から9までの整数をランダムに生成するにはどうすればよいですか?
明確にするために、ここでは複数のランダムな整数を取得する方法を示します。
与えられた
>>> import random
lo = 0
hi = 10
size = 5
コード
複数のランダムな整数
# A
>>> [lo + int(random.random() * (hi - lo)) for _ in range(size)]
[5, 6, 1, 3, 0]
# B
>>> [random.randint(lo, hi) for _ in range(size)]
[9, 7, 0, 7, 3]
# C
>>> [random.randrange(lo, hi) for _ in range(size)]
[8, 3, 6, 8, 7]
# D
>>> lst = list(range(lo, hi))
>>> random.shuffle(lst)
>>> [lst[i] for i in range(size)]
[6, 8, 2, 5, 1]
# E
>>> [random.choice(range(lo, hi)) for _ in range(size)]
[2, 1, 6, 9, 5]
ランダム整数のサンプル
# F
>>> random.choices(range(lo, hi), k=size)
[3, 2, 0, 8, 2]
# G
>>> random.sample(range(lo, hi), k=size)
[4, 5, 1, 2, 3]
詳細
一部の投稿では、複数のランダムな整数をネイティブに生成する方法を示しています。1 暗黙の質問に対処するいくつかのオプションを次に示します。
random.random
範囲内のランダムな浮動小数点数を返します[0.0, 1.0)
random.randint
次のN
ようなランダムな整数を返しますa <= N <= b
random.randrange
エイリアスrandint(a, b+1)
random.shuffle
シーケンスを所定の位置に入れ替えますrandom.choice
空でないシーケンスからランダムな要素を返しますrandom.choices
返しますk
(置換、Python 3.6以降)。random.sample
返しますk
(置換なし):2モジュールの例を使用したチャンキングとエイリアスに関するR.ヘッティンガーの講演も参照してくださいrandom
。
これは、標準ライブラリとNumpyのいくつかのランダム関数の比較です:
| | random | numpy.random |
|-|-----------------------|----------------------------------|
|A| random() | random() |
|B| randint(low, high) | randint(low, high) |
|C| randrange(low, high) | randint(low, high) |
|D| shuffle(seq) | shuffle(seq) |
|E| choice(seq) | choice(seq) |
|F| choices(seq, k) | choice(seq, size) |
|G| sample(seq, k) | choice(seq, size, replace=False) |
Numpy の多くの分布の 1つをランダムな整数のサンプルにすばやく変換することもできます。3
例
>>> np.random.normal(loc=5, scale=10, size=size).astype(int)
array([17, 10, 3, 1, 16])
>>> np.random.poisson(lam=1, size=size).astype(int)
array([1, 3, 0, 2, 0])
>>> np.random.lognormal(mean=0.0, sigma=1.0, size=size).astype(int)
array([1, 3, 1, 5, 1])
1つまり、@ John Lawrence Aspden、@ ST Mohammed、@ SiddTheKid、@ user14372、@ zangwなど。 2 @prashanthは、このモジュールが1つの整数を表示することを述べています。 3 @Siddharth Satpathyによる実証
>>> import random
>>> random.randrange(10)
3
>>> random.randrange(10)
1
10個のサンプルのリストを取得するには:
>>> [random.randrange(10) for x in range(10)]
[9, 0, 4, 0, 5, 7, 4, 3, 6, 8]
0〜9のランダムな整数を生成します。
import numpy
X = numpy.random.randint(0, 10, size=10)
print(X)
出力:
[4 8 0 4 9 6 9 9 0 7]
これはより数学的なアプローチですが、100%機能します。
random.random()
関数を使用してa
との間の数を生成するとしb
ます。これを実現するには、次のようにします。
num = (b-a)*random.random() + a;
もちろん、より多くの数を生成できます。
randomモジュールのドキュメントページから:
警告:このモジュールの疑似ランダムジェネレーターは、セキュリティ上の目的で使用しないでください。暗号的に安全な疑似乱数ジェネレータが必要な場合は、os.urandom()またはSystemRandomを使用してください。
Python 2.4で導入されたrandom.SystemRandomは、暗号的に安全であると考えられています。執筆時点で最新のPython 3.7.1でも引き続き使用できます。
>>> import string
>>> string.digits
'0123456789'
>>> import random
>>> random.SystemRandom().choice(string.digits)
'8'
>>> random.SystemRandom().choice(string.digits)
'1'
>>> random.SystemRandom().choice(string.digits)
'8'
>>> random.SystemRandom().choice(string.digits)
'5'
の代わりにstring.digits
、range
おそらく理解とともに、他のいくつかの回答に従って使用できます。必要に応じて混ぜ合わせてください。
OpenTURNSは、ランダムな整数をシミュレートするだけでなく、関連する分布を UserDefined
定義されたクラスに。
以下は、分布の12の結果をシミュレートします。
import openturns as ot
points = [[i] for i in range(10)]
distribution = ot.UserDefined(points) # By default, with equal weights.
for i in range(12):
x = distribution.getRealization()
print(i,x)
これは印刷します:
0 [8]
1 [7]
2 [4]
3 [7]
4 [3]
5 [3]
6 [2]
7 [9]
8 [0]
9 [5]
10 [9]
11 [6]
括弧は1次元であるためx
、そこにありPoint
ます。への1回の呼び出しで12の結果を生成する方が簡単ですgetSample
。
sample = distribution.getSample(12)
生成されます:
>>> print(sample)
[ v0 ]
0 : [ 3 ]
1 : [ 9 ]
2 : [ 6 ]
3 : [ 3 ]
4 : [ 2 ]
5 : [ 6 ]
6 : [ 9 ]
7 : [ 5 ]
8 : [ 9 ]
9 : [ 5 ]
10 : [ 3 ]
11 : [ 2 ]
このトピックの詳細については、こちらをご覧ください。http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html