加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

如何使用mysql用户定义的函数生成高斯分布

发布时间:2020-12-11 23:49:51 所属栏目:MySql教程 来源:网络整理
导读:我喜欢使用MySQL进行定量分析和统计. 我想创建一个MySQL用户定义的函数形式: sample_gaussian(mean,stdev)返回单个随机化的 从具有均值和标准的高斯分布中采样的值 用户输入参数的偏差. MySQL已经有了 函数rand()返回一个随机数,所以我只需要 知道一些伪代

我喜欢使用MySQL进行定量分析和统计.
我想创建一个MySQL用户定义的函数形式:
sample_gaussian(mean,stdev)返回单个随机化的
从具有均值和标准的高斯分布中采样的值
用户输入参数的偏差. MySQL已经有了
函数rand()返回一个随机数,所以我只需要
知道一些伪代码用于约束/转换该值
所以它属于正确的分布.
有什么建议?

BTW-这是我的第一个stackoverflow问题,所以请原谅
我,如果这个问题在这个网站上询问太多用户. 最佳答案 在回答我自己的问题时,这是一个MySQL用户定义函数,它返回从具有给定均值和标准差的高斯分布中采样的单个随机值.

DROP FUNCTION IF EXISTS gauss;
DELIMITER //
CREATE FUNCTION gauss(mean float,stdev float) RETURNS float
BEGIN
set @x=rand(),@y=rand();
set @gaus = ((sqrt(-2*log(@x))*cos(2*pi()*@y))*stdev)+mean;
return @gaus;
END
//
DELIMITER ;

要验证这实际上是返回高斯分布,您可以生成一系列这些,然后绘制直方图:

create temporary table temp (id int,rando float);
insert into temp (rando) select gauss(2,1); # repeat this operation 500 times
insert into temp (rando) select gauss(2,1) from any_table_with_500+_entries limit 500;
select round(temp,1),count(*) from temp group by round(temp,1) # creates a histogram

如果您在excel或选择的图形工具中绘制直方图,您将看到钟形正常曲线.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读