2016-11-09 120 views
1

我有一個var temp,比如temp = 100。我想要做的是生成8個數據點。這8點顯示如圖所示。它看起來像正態分佈,但我想在這些點上添加很多隨機值,以便它們看起來不像完美的正態分佈。最終數據(曲線下方的面積)應爲,總計爲溫度。有人可能會建議如何在Python中輕鬆整齊地做到這一點嗎?基於python中的一個值生成「正態分佈」數據

我試圖在numpy/matplot中使用分佈函數。但是,我想知道如何得到像圖中所示的8點(x = 0,1,2,3,4 ...)?另外我無法弄清楚我可以如何將它們加到100?

enter image description here

+0

解決方法有很多,這裏有7個工具:

你最好的選擇是從與相應的平均分配樣本7個隨機點,然後點添加到數據集承擔差額https://www.dataquest.io/blog/python-data-visualization-libraries/ –

+0

你的問題不清楚。你想繪製一個隨機生成的數字的直方圖,約束他們的總和是100? –

+0

@ItamarKatz是的。我想生成這些看起來像正常分佈的8個點,但它們總結爲temp(在本例中爲100)。 – wildcolor

回答

1

通過施加總和temp=100你介紹的依賴至少兩個數據點之間,因此無法建立一套獨立的採樣隨機數據點。

This answer on mathworks提供了更詳細的信息。

一個簡單的例子:

想象一下投幣。系統中的隨機性正好是一個二進制結果,或1位。

想象一下兩個硬幣翻轉。系統中的隨機性恰好是兩個二進制結果或2位。

現在想象一下對兩個硬幣翻轉施加一個總和約束,假設你希望系統中硬幣翻轉的總和等於1.因爲第二個硬幣翻轉的結果是由第一個二元決策的結果決定的,系統中的隨機性會縮小。

因此,您將系統的總體隨機性從2位降低到1位。因此不可能從具有總和約束的正態分佈抽樣8個真(僞)隨機點。在比較

>>> import numpy as np 
>>> temp = 100.0 
>>> datapoints = 8 
>>> dev = 1 
>>> data = np.random.normal(temp/datapoints, dev, datapoints-1) 
>>> print(data) 
[ 11.70369328 10.77010243 11.20507387 12.40637644 12.81099137 
    12.55329521 10.95809056] 
>>> data = np.append(data,temp-sum(data)) 
>>> data 
array([ 11.70369328, 10.77010243, 11.20507387, 12.40637644, 
     12.81099137, 12.55329521, 10.95809056, 17.59237685]) 
>>> sum(data) 
100.0 
+0

謝謝你的回答。我想要的比你的回答容易。我不需要像你提到的那樣嚴格的「隨機性」。我想要的是生成這些8點看起來像正態分佈,但他們有一些隨機性。例如我可以簡單地爲列表中的第二個元素添加一個隨機值,並在第三個最後一個元素中減去相同的值,以便總和保持不變。 – wildcolor

+0

答案的主要問題是總和不等於temp。當你'追加'最後一個值時,最終的分佈不再像正常一樣。有什麼建議麼? – wildcolor

相關問題