我正在使用scipy並希望創建一個具有特定平均值的第n個數組。創建一個具有特定平均值的隨機數組
假設我想長度爲3的平均爲2.5的隨機陣列,因此可能的選項可以是: [1.5,3.5,2.5] [0.25,7.2,0.05] 等等等等...
我需要創建許多這樣的數組,具有不同的長度和不同的平均值(指定)爲每個,所以廣泛的解決方案將受到歡迎。
我正在使用scipy並希望創建一個具有特定平均值的第n個數組。創建一個具有特定平均值的隨機數組
假設我想長度爲3的平均爲2.5的隨機陣列,因此可能的選項可以是: [1.5,3.5,2.5] [0.25,7.2,0.05] 等等等等...
我需要創建許多這樣的數組,具有不同的長度和不同的平均值(指定)爲每個,所以廣泛的解決方案將受到歡迎。
就產生(在這種情況下,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(或非常接近平均值)
你還沒有指定你想要的發行版。
您是否希望實際數組的平均值爲2.5,或者所有數組的平均值爲2.5,這一點也不清楚。
最簡單的解決方案,三個隨機在一個甚至從0分配號碼2 *平均-是這樣的:
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))
我找到了問題的解決方案。
numpy.random.triangular(左,模式,右,大小=無)
然而,次要問題是,它迫使在樣品上的三角分佈。
但是你想要什麼樣的分佈? – askewchan 2013-03-19 05:03:08
平均值是否應該是精確的,或者您是否可以將您的隨機數重新居中在期望的平均值附近,即if標準隨機浮點數[0,1)的長期平均值爲0.5,那麼您可以通過將中心值加2來移動2.5 ... – 2013-03-19 04:51:39
列表中的數字是否被限制爲非負數?如果沒有限制,我認爲你可以用除最後一個之外的隨機數填寫全部列表,然後根據其他數字和平均值計算最後一個數字。 – Reorx 2013-03-19 05:00:57
是的,這些數字必須是非負數。 – DotPi 2013-03-19 05:03:37