Nim 编程入门之产生指数分布的随机数

这一节,我们使用 Nim 语言来实现符合指数分布的随机数。
Nim 语言是一门高效而优雅的系统级编程语言,可以编译成 C, C++, javascript 等后端。
官网如下:https://nim-lang.org/
中文官网:https://nim-cn.com/
指数分布是一种连续概率分布,常用来表示随机事件发生的时间间隔。
如果 x > 0 f ( x ) = 1 β e − x β f(x) = \frac{1}{\beta} e^{-\frac{x}{\beta}} f(x)=β1eβx
若 x <= 0 f ( x ) = 0 f(x) = 0 f(x)=0
若要产生指数分布的随机数,首先 u 取 (0, 1) 之间的符合均匀分布的随机数,
令 f = - beta * ln(1-y),可以得到符合指数分布的随机数。

# 指数分布的随机数
proc exponent*[T: SomeFloat](beta: T): T = 
  var u = rand(1.0)
  result = -beta * T(ln(u))

下面我们画出生成的 1000000 个符合指数分布随机数的图形,我们需要安装 plotly 等库。

when isMainModule:
  import plotly, sugar, sequtils, chroma, os
  randomize()
  var res: seq[float]
  for i in 1 .. 1000000:
    res.add exponent[float](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: "exp", width: 1200, height: 400,
                      xaxis: Axis(title: "x"),
                      yaxis: Axis(title: "y"), autosize: false)

  var p = Plot[float](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 教程请关注 Nim 中文官网:https://nim-cn.com/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值