我正在處理從正常人群中獲得的數字范圍,這些范圍代表與平均值的 - 2 個標準偏差。例外值是超出 2SD 限制的值。我想生成看起來像人口資料的隨機值。因此,我為一個生成數字的函式提供了一個平均值和 -2SD 范圍,這些數字產生了一個看起來像原始人口的完美鐘形曲線。因此,例如,進行實驗室測驗,例如參考范圍為 60 - 100 的葡萄糖。這代表了通過測驗一大群正常人獲得的值。平均值為 80,2SD 范圍為 60-100。根據定義,這是總人口的 95%。值可以從 50 以下擴展到 500。我想生成適合這些引數的亂數。
我正在玩 numpy 和 scipy,但我不太了解數學。有沒有可以做到這一點的功能?
uj5u.com熱心網友回復:
np.random.normal這樣做。第一個引數是均值,第二個是標準差 (SD),第三個是要生成的樣本數。在您的情況下,均值為 80,SD 為 10。因此,您可以使用以下代碼生成 1_000_000 個專案:
import numpy as np
arr = np.random.normal(80, 10, 1_000_000)
要檢查結果在統計上是否正確,您可以使用:
# Example of result: 0.954208 (ie. 95.4% are in the 60-100 range)
((arr > 60) & (arr < 100)).sum() / arr.size
uj5u.com熱心網友回復:
內置random模塊可以生成正態分布的數字。 normalvariate()取平均值和標準差:
import random
from matplotlib import pyplot as plt
plt.hist([random.normalvariate(80, 10) for _ in range(1_000_000)], bins=100)
plt.show()
輸出:

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/430701.html
