浮動小数点数の範囲内で乱数を取得するにはどうすればよいですか?


414

randrange(start, stop)整数の引数のみを受け取ります。それでは、2つの浮動小数点値の間の乱数をどのように取得しますか?


2
numpyがnp.random.uniform(start, stop)必要なnp.random.uniform(start, stop, samples)場合、または複数のサンプルが必要な場合。それ以外の場合は、以下の回答が最適です。
sachinruk

回答:


650

random.uniform(a、b)を使用します。

>>> random.uniform(1.5, 1.9)
1.8733202628557872

4
これは理論的には1.5と1.9を生成できるでしょうか?それとも1.50〜1と1.89〜のみを生成するでしょうか?
Musixauce3000

14
@ Musixauce3000短い答え:はい。より長い答え:あなたがドキュメントを見ると、それは次のように述べています:Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < a言い換えれば、出力Nは入力aとのどちらかに等しくなる可能性がありbます。この場合1.51.9
Dan

.uniform関数を使用せずにこれを行う別の方法はありますが、代わりに.randomまたはを使用しますかrandrange
DerryckDX

1
@DerryckDX 1.5 + random.random() * (1.9 - 1.5)はそれを実行する必要があります。ただし、仕様によると、これは正確には返されません1.9(理論的にも)。
ヨナタンN

Musixauce3000 @に思えるuniform(a, b)として実装されてa + (b-a) * random()戻る範囲内の乱数〔、b)または[B]丸めに応じ github.com/python/cpython/blob/...を
パベル

74

random.uniform(a, b)あなたが探しているもののようです。ドキュメントから:

a <= bの場合はa <= N <= b、b <aの場合はb <= N <= aとなるようなランダムな浮動小数点数Nを返します。

こちらをご覧ください


47

ポイントの右側にN桁のランダムな浮動小数点数を生成する場合は、次のようにします。

round(random.uniform(1,2), N)

2番目の引数は小数点以下の桁数です。


なぜこれがより多くの賛成票を持っていないのか、他の人は丸めメカニズムを持っていませんでした。
TheTechRobo36414519

2

最も一般的には、以下を使用します。

import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding

Pythonは必要に応じて他のディストリビューションを提供します。

あなたがいる場合はnumpy既にインポート、あなたはそれに相当を使用することができます:

import numpy as np
np.random.uniform(a, b) # range [a, b)

繰り返しになりますが、別のディストリビューションが必要な場合numpyは、Pythonと同じディストリビューションだけでなく、その他の多くのディストリビューションも提供します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.