網站首頁 編程語言 正文
在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
相關推薦
- 2022-06-15 Python中的?any()?函數和?all()?函數_python
- 2022-08-02 Redis實現登錄注冊的示例代碼_Redis
- 2022-05-11 mac ssh 免密登錄 localhost
- 2022-06-17 C語言詳解函數與指針的使用_C 語言
- 2022-05-04 C#異步編程由淺入深(三)之詳解Awaiter_C#教程
- 2022-07-25 C#爬蟲基礎之HttpClient獲取HTTP請求與響應_C#教程
- 2022-05-13 kafka-server-stop.sh關閉Kafka失敗
- 2022-05-08 jquery實現淘寶詳情頁選擇套餐_jquery
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支