1

どういうわけか、[5,5]と言うと、この関数を10回実行するなど、非常に均一な数を生成できる乱数が必要です。この関数を10回実行すると、0.5未満の5つの数と他の5つの数が必要になります。数値が0.5より大きい。

次のように、すべての実行を分離する必要があります。

for i in range(0,10):
   rnd=random_function([6,3,1])
   print rnd

この関数を10回実行した後、6つの数値は0.6未満、3つの数値は0.6から0.9の間、1つの数値は0.9から1の間です。

誰かが私がそれをどのように行うことができるか知っていますか?Python内のランダム関数はそれほど均一ではないので....ありがとう!!

4

4 に答える 4

5

均一でないのはランダムの本質ではないですか?6つの乱数を生成し、それらの半分を0.5未満にし、残りの半分を0.5を超えるようにする場合は、0から0.5の間に3つの数値を生成し、0.5から1の間に3つの乱数を生成する必要があります。

于 2011-08-27T21:55:56.990 に答える
2

あなたが求めているのはランダムではありません。確かに、それはかなり構造化されています。ランダムデータのポイントは、構造化されていないことです。値がどうなるかについては何も言えず、平均して何になるかだけです。

ただし、引き続き必要なことを実行できます。数値を含める範囲を指定するだけです。

>>> def random_function(*args):
...     n = sum(args)
...     bottom = 0
...     for m in args:
...             for _ in range(m):
...                     yield random.uniform(bottom, bottom + m/n)
...             bottom += m/n
...
>>> list(random_function(6,3,1))
[0.1849778317803791, 0.2779140519434712, 0.08380168147928498, 0.5477412922676888
, 0.5158697440011519, 0.5535466918038039, 0.8046993690361345, 0.714614514522802,
 0.7102988180048052, 0.9608096335125095]
>>> list(random_function(6,3,1))
[0.29313403848522546, 0.5543469551407342, 0.14208842652528347, 0.344464024804118
7, 0.3168266508239002, 0.5956620829410604, 0.673021479097414, 0.7141779120687652
, 0.7783099010964684, 0.9103924993423906]

説明:

が与えられ(6,3,1)たら、それらの合計(10)を計算します。0から6/10までの6つの数値、6/10から6/10 + 3/10までの3つの数値、および6/10+3/10から6/10+3/10+1/10までの1つの数値が必要です。これらを呼び出すことで生成できます

random.uniform(0, 6/10) six times,
random.uniform(6/10, 9/10) three times, and
random.uniform(9/10, 1) once.
于 2011-08-27T22:58:38.540 に答える
1

まあ、それは「乱数」の目的を打ち破るようなものですが、Pythonはこれをサポートしています。

randomモジュール( )の一部として、toの代わりに浮動小数点の範囲をimport random使用できます。random.uniform(a,b)random.random()ab

詳細については、Pythonのドキュメントをご覧ください。

于 2011-08-27T21:58:21.820 に答える
1

質問のコンテキストを知ることは役立ちますが、探しているのは、通常の疑似乱数ではなく、低差異のシーケンスであるように見えます。

より具体的には、ハルトン列が望ましい結果をもたらすかどうかを確認します。Pythonの実装が利用可能です

于 2015-04-27T22:28:21.367 に答える