網(wǎng)站首頁 編程語言 正文
在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
相關(guān)推薦
- 2022-03-24 詳析C#的協(xié)變和逆變_C#教程
- 2022-01-05 npm ERR! code ENOENT npm ERR! syscall open npm ERR
- 2022-11-14 UNIX環(huán)境高級(jí)編程筆記
- 2022-05-24 C#多線程TPL模式下使用HttpClient_C#教程
- 2024-03-25 解決idea配置自定義的maven失敗的問題
- 2023-01-21 Python?configparser模塊的用法示例代碼_python
- 2023-03-23 詳解python?ThreadPoolExecutor異常捕獲_python
- 2022-09-25 edge或谷歌瀏覽器打開默認(rèn)是百度或其他,怎么修改成自己想要的頁面
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支