生成一组-0.1到0.1之间的随机数,且总和为0
发布时间:2020-12-12 13:28:08 所属栏目:MsSql教程 来源:网络整理
导读:工作中遇到需要将一个累计值分摊到若干天只,且不能平均分摊,要有一定的波动,比如1000,分配到20天中,平均每天是50,但是又不能全是50,需要分配成49,51,52这样。所以就需要生成一组-0.1到+0.1之间的随机数,但是要保证求和等于0,然后去乘平均数,得到每
工作中遇到需要将一个累计值分摊到若干天只,且不能平均分摊,要有一定的波动,比如1000,分配到20天中,平均每天是50,但是又不能全是50,需要分配成49,51,52这样。所以就需要生成一组-0.1到+0.1之间的随机数,但是要保证求和等于0,然后去乘平均数,得到每天需要分配的值。 create table #t(a numeric(8,7)) declare @i int,@last_num numeric(8,7),@f int set @f=0 while @f=0 begin set @i=1 while @i<10000 --产生的随机数数量 begin insert into #t(a) values(rand()*0.2-0.1 ) --随机数的范围 set @i=@i+1 end; set @last_num=0-(select SUM(a) from #t); ---生成最后一个随机数 if abs(@last_num )<0.1 --校验最后一个随机数 begin insert into #t(a) values(@last_num) --如果通过校验,则将随后一个数插入临时表,并查询出结果集 select * from #t; drop table #t; set @f=1 end else begin delete from #t; set @f=0 --如果校验不通过,则重新生成 end end生成10000条,大概需要35秒左右时间,性能还算能接受。
from random import random RandList=[] n=10000 while 1: for i in range(n-1): RandList.append(random()*0.2-0.1) RandList_Sum=sum(RandList) Last_Rand=-RandList_Sum if Last_Rand>-0.1 and Last_Rand<0.1: print('Last_Rand:',Last_Rand) RandList.append(Last_Rand) break else: RandList=[] #print('重新生成')另外,在网上搜索到一篇用脑excel生成的文章,连接如下 http://www.excel123.cn/Article/excelhanshu/201312/1035.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容