日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

random---伪随机数生成器

發布時間:2023/11/29 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 random---伪随机数生成器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python3.5

作用:實現了多種類型的偽隨機數生成器

random模塊基于Mersenne Twister 算法提供了一個快速偽隨機數生成器。原先開發這個生成器是為了向蒙特卡洛模擬生成輸入,Mersenne Twister算法會生成有一個大周期的近均勻分布的數,以適用于各種類型的應用。

?

1.生成隨機數

random()函數從所生成的序列返回下一個隨機的浮點數值。返回的所有值都在0-n之間。

import random

for i in range(5):
??? print("%04.3f" % random.random())
0.166
0.201
0.282
0.920
0.429

要生成一個指定數值區間內的數,則要使用uniform().

import random

for i in range(3):
??? print("%.3f" % random.uniform(1,100))
3.520
79.323
15.854

傳入最大值和最小值,uniform()會使用公式min+(max-min)*random()來調整random()的返回值

?

2.指定種子

每次調用random()會生成不同的值,在一個非常的的周期之后數字才會重復。這對于生成唯一值或變化的值很有用,不過有些情況下可能需要提供相同的數據集,從而以不同的方式處理。對此,一種方法是使用一個程序來生成隨機數,并保存這些隨機數,以便通過一個單獨的方式另行處理。不過對于量很大的數據來說可能并不實用,所以random包含了一個seed()函數,用來初始化偽隨機數生成器,使它能生成一個期望的值集。

種子(seed)值會控制生成偽隨機數所用公式產生的第一個值,由于公式是確定的,改變種子也就設置了整個要生成的序列。seed()的參數可以是任意可散列對象。默認會使用平臺特定的隨機源(如果有的話)。否則,會使用當前時間。

【偽隨機數之所以是偽,應該就是這個原因了吧,種子定了,整個序列就定了,通過不短變換種子值得到隨機數】

?

3.保存狀態

random()使用的偽隨機算法的內部狀態可以保存,并用于控制后續各輪生成的隨機數。繼續生成隨機數之前恢復前一個狀態,這會減少有之前輸入得到重復的值或值序列的可能性。getstate()函數會返回一些數據,以后可以用setstate()利用這些數據重新初始化偽隨機數生成器。

import random
import os
import pickle

if os.path.exists('state.dat'):
??? print("Found state.dat, initializing random module")
??? with open('state.dat','rb') as fp:
??????? state=pickle.load(fp)
??? random.setstate(state)
else:
??? print("No state.dat, seeding")
??? random.seed(1)

for i in range(3):
??? print("%.3f" % random.random())
print()

with open('state.dat','wb') as fp:
??? pickle.dump(random.getstate(),fp)

print("\nAfter saving state")
for i in range(3):
??? print("%.3f" % random.random())
print()

gerstate()返回的數據是一個實現細節,所以這個例子用pickle將數據保存到一個文件,不過可以把它當作一個黑盒。如果程序開始是這個文件存在,則加載原來的狀態并繼續。每次運行時都會在保存之前及之后生成一些書,以展示恢復狀態會導致生成器在次生成同樣的值

【相當于電影重放一樣,設置一個節點getstate()[記錄播放到的時間],用setstate()回到上次節點的時間,再次播放一遍】

?

4.隨機整數

random()將生成浮點數。可以吧結果轉換為整數,不過直接使用randint()生成整數會更方便。

import random

print("[1,100]")
for i in range(5):
??? print(random.randint(1,100),end=' ')
print()

print("[-10,5]")
for i in range(5):
??? print(random.randint(-10,5),end=' ')

?

?

randint()的參數的值是閉區間的兩端。這些數可以是正數或負數,不過第一個值要小于第二個值。

randrange()是從區間選擇值的一種更一般的形式。除了開始值(start)和結束值(stop),randrange()還支持步長(step)參數,所以它完全等價于從range(start,stop,step)選擇一個隨機值。不過randrange更高效,因為它并沒有真正構造區間。

?

5.選擇隨機元素 choice()

在一個序列中隨機選擇。

模擬拋硬幣:

view plaincopy to clipboardprint
  • import random??
  • ?
  • out={'heads':0,'tail':0}??
  • ?
  • sides=['heads','tail']??
  • ?
  • for i in range(100000):??
  • ??? out[random.choice(sides)]+=1?
  • ?
  • print('head:',out['heads'])??
  • print('tail:',out['tail'])?
  • ?

    這樣不必再使用數字進行轉換

    ?

    。。。,排列,采樣,多個并發生成器,SystemRandom,非均勻分布,角分布,大小分布

    轉載于:https://www.cnblogs.com/DreamZero/p/5071558.html

    總結

    以上是生活随笔為你收集整理的random---伪随机数生成器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。