3

私は scipy を使用しており、特定の平均で長さ n の配列を作成したいと考えています。

長さ 3、平均 2.5 のランダムな配列が必要だとすると、可能なオプションは次のようになります: [1.5, 3.5, 2.5] [.25, 7.2, .05] など...

さまざまな長さとそれぞれに異なる平均 (指定) を持つこのような配列を多数作成する必要があるため、一般化されたソリューションを歓迎します。

4

3 に答える 3

9

必要な範囲の数値を生成するだけです (この場合は 0...10)

>>> import random
>>> nums = [10*random.random() for x in range(5)]

平均を計算する

>>> sum(nums)/len(nums)
4.2315222659844824

平均を必要な場所にシフトします

>>> nums = [x - 4.2315222659844824 + 2.5 for x in nums]
>>> nums
[-0.628013346633133, 4.628537956666447, -1.7219257458163257, 7.617565127420011, 2.6038360083629986]
>>> sum(nums)/len(nums)
2.4999999999999996

好きな分布/範囲を使用できます。このように平均をシフトすると、常に平均が 2.5 (またはそれに非常に近い) になります。

于 2013-03-19T05:05:15.770 に答える
2

必要なディストリビューションを指定していません。

また、実際の配列の平均を 2.5 にするか、すべての配列の償却平均を 2.5 にするかは明確ではありません。

最も単純な解決策 (0 から 2*avg までの均等分布の 3 つの乱数) は次のとおりです。

return 2*avg * np.random.rand(3)

配列の平均が 2.5 であることを保証したい場合、それは非常に単純な制約ですが、それを満たすにはさまざまな方法があり、どの方法が必要かを説明する必要があります。例えば:

n0 = random.random() * 2*avg
n1 = random.random() * (2*avg - n0)
n2 = random.random() * (2*avg - n0 - n1)
return np.array((n0, n1, n2))
于 2013-03-19T04:50:49.667 に答える
-2

問題の解決策を見つけました。

numpy.random.triangular(左、モード、右、サイズ=なし)

訪問: http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.triangular.html#numpy.random.triangular

ただし、小さな問題は、サンプルに三角形の分布が強制されることです。

于 2013-03-19T04:56:01.590 に答える