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

學無先后,達者為師

網站首頁 編程語言 正文

Python自制隨機數生成算法

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

在Python中生成隨機數, 一般會調用random模塊, 但random模塊內也有自己的算法實現。
如何設計自己的算法呢?本文將介紹。

目錄

    • 1.算法
    • 2.程序實現
    • 3.使用matplotlib 檢驗算法

1.算法

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

2.程序實現

程序生成在0至1范圍內的500個隨機數。

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() # 加入時間的隨機因素
    return seed % i

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

3.使用matplotlib 檢驗算法

對隨機數算法的要求是隨機數的重復周期很長, 且在生成的區間內分布均勻

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

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

而測試random模塊中的random函數, 結果如下:

會發現, 前述自制的隨機數生成算法生成的值比較均勻, 比較好地模擬了random模塊中的隨機數生成。
如果有更好的方法, 歡迎在評論區交流!

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

欄目分類
最近更新