Box-Muller算法
均值
,标准差
计算:
go生成符合正态分布随机数:
import ( "fmt" "math" "math/rand" "time" ) func GetGaussRandomNum(min, max int64) int64 { σ := (float64(min) + float64(max)) / 2 μ := (float64(max) - σ) / 3 rand.Seed(time.Now().UnixNano()) x := rand.Float64() x1 := rand.Float64() a := math.Cos(2*math.Pi*x) * math.Sqrt((-2)*math.Log(x1)) result := a*μ + σ return int64(result) } func main() { for i := 1; i < 1000; i++ { result := GetGaussRandomNum(30, 60) fmt.Println(result) } }
python生成符合正态分布随机数:
import numpy as np import seaborn as sns import matplotlib.pyplot as plt import random # 方法一 def getGaussRandomNum(min, max): # 比如 生成 50-100 范围内的正态分布的数,均值为75 # 据 3 sigma 法则,取标准差为 (100-75)/3 = 8.33 # mu, sigma = 75, 8.33 # 30-60 mu=45 sig=(60-45)/3=5 mu = (min + max) / 2 sigma = (max - mu) / 3 s = np.random.normal(mu, sigma, 1) return int(s) # sns.set_palette("hls") #设置所有图的颜色,使用hls色彩空间 # sns.distplot(s,color="r",bins=1000,kde=True) #绘制直方图,color设置颜色,bins设置直方图的划分数 # plt.show() #显示验证结果 # 方法二 def getGaussRandomNum1(min, max): mu = (min + max) / 2 sigma = (max - mu) / 3 s = random.gauss(mu, sigma) return int(s)