高斯分布(gauss) 常用的一種分布舟肉,這一節(jié)我們來(lái)介紹如何產(chǎn)生符合高斯分布的隨機(jī)數(shù)修噪。
Nim 語(yǔ)言是一門(mén)高效而優(yōu)雅的系統(tǒng)級(jí)編程語(yǔ)言,可以編譯成 C, C++, javascript 等后端路媚。
官網(wǎng)如下:https://nim-lang.org/
中文官網(wǎng):https://nim-cn.com/
根據(jù)中央極限定理黄琼,當(dāng) N 足夠大的時(shí)候,我們可以使用 x = sum(ri) - 6整慎,ri 為 0, 1之間的
均勻分布脏款,gauss = mu + sigma * x 來(lái)逼近高斯分布。其中 mu 為高斯分布的均值裤园,而
sigma 為高斯分布的方差弛矛。
# 正態(tài)分布的隨機(jī)數(shù)
# N(mu, sigma)
proc gauss*[T: SomeFloat](mu, sigma: T, n: int = 12): T =
var x: float
for i in 1 .. n:
# randomize()
x += rand(1.0)
x -= 6.0
result = mu + sigma * T(x)
下面,我們來(lái)檢驗(yàn)一下結(jié)果比然,需要安裝使用 nimble install plotly 等命令安裝繪圖庫(kù)
when isMainModule:
import plotly, sugar, sequtils, chroma, os
randomize()
var res: seq[float]
for i in 1 .. 1000000:
res.add gauss[float](0, 1)
var colors = @[Color(r: 0.1, g: 0.1, b: 0.9, a: 1.0)]
var d = Trace[float](`type`: PlotType.Histogram,nbins:5000)
var size = @[1.float]
d.marker = Marker[float](size: size, color: colors)
d.xs = res
# d.xs = toSeq(1 .. d1.size).map(x => x / 16000)
# d.xs = frame2Time(d1.size, 200, 80, 16000)
# d.ys = d1.toSeq
d.text = @["hello", "data-point", "third", "highest", "<b>bold</b>"]
var layout = Layout(title: "gauss", width: 1200, height: 400,
xaxis: Axis(title: "x"),
yaxis: Axis(title: "y"), autosize: false)
var p = Plot[floavt](layout: layout, traces: @[d])
# 保存圖像
if not existsDir("./generate"):
createDir("./generate")
# run with --threads:on
p.show(filename = "generate/display.jpg")
在命令行輸入 nim c -r --threads:on test.nim
Nim繪圖
基本吻合標(biāo)準(zhǔn)正太分布的要求丈氓。
Nim 中文博客: https://tea.nim-cn.com/