日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Python自制隨機(jī)數(shù)生成算法

作者:qfcy_ 更新時(shí)間: 2022-08-15 編程語言

在Python中生成隨機(jī)數(shù), 一般會(huì)調(diào)用random模塊, 但random模塊內(nèi)也有自己的算法實(shí)現(xiàn)。
如何設(shè)計(jì)自己的算法呢?本文將介紹。

目錄

    • 1.算法
    • 2.程序?qū)崿F(xiàn)
    • 3.使用matplotlib 檢驗(yàn)算法

1.算法

生成隨機(jī)數(shù), 首先要有一個(gè)隨機(jī)數(shù)種子seed, 然后根據(jù)這個(gè)種子, 推導(dǎo)出剩余的數(shù)字, 也就是偽隨機(jī)數(shù)。
一種方法是將種子經(jīng)過一定的變換, 再除以一個(gè)數(shù),
得到的余數(shù)作為新的種子。這種方法也稱線性同余算法。

2.程序?qū)崿F(xiàn)

程序生成在0至1范圍內(nèi)的500個(gè)隨機(jī)數(shù)。

from time import perf_counter

seed = perf_counter()
k=5.6;b=3.5
i=1
def random():
    global seed
    seed=seed*k+b
    if seed > 10**10:
        seed=perf_counter() # 加入時(shí)間的隨機(jī)因素
    return seed % i

l=[]
for j in range(500):
    l.append(random())
    k=random()*5.6 # 變化k, 避免隨機(jī)數(shù)重復(fù)

3.使用matplotlib 檢驗(yàn)算法

對(duì)隨機(jī)數(shù)算法的要求是隨機(jī)數(shù)的重復(fù)周期很長(zhǎng), 且在生成的區(qū)間內(nèi)分布均勻

import matplotlib.pyplot as plt
from random import random as random2
# --snip-- 前面部分省略
plt.hist(l,bins=len(l)//5)
plt.show()
# 和真正的random函數(shù)對(duì)照
l2=[random2() for i in range(500)]
plt.hist(l2,bins=len(l2)//5)
plt.show()

結(jié)果如下, 這是自制的random()函數(shù):

而測(cè)試random模塊中的random函數(shù), 結(jié)果如下:

會(huì)發(fā)現(xiàn), 前述自制的隨機(jī)數(shù)生成算法生成的值比較均勻, 比較好地模擬了random模塊中的隨機(jī)數(shù)生成。
如果有更好的方法, 歡迎在評(píng)論區(qū)交流!

原文鏈接:https://blog.csdn.net/qfcy_/article/details/126329980

欄目分類
最近更新