[英]I wrote a simple random number generator, how can I graph the distribution of the function I wrote?
這是我第一次編寫隨機數生成器,而我只是在四處弄亂,看看我可以用隨機公式做什么。
但是,我對我的功能有多偏心以及功能的分布(在1到9之間)感到好奇。 這是我不必要的長代碼:
import time
class Random:
"""random generator"""
def __init__(self):
""" Random()-> create a random number generator with a random seed
a seed is needed in order to generate random numbers"""
self.seed = time.time()
def random(self):
""" Random.random() -> get a random number using a formula"""
self.seed =(((int(self.seed)*129381249123+2019383)**0.74123)/517247) % 288371
def get_ran_num(self):
""" Random.get_ran_num() -> return a random integer from 1 thru 10"""
self.random()
return int(list(str(int(self.seed)))[3])
ranNum = Random()
如果有一些工具可以執行隨機函數,然后運行數千次,然后以圖形方式顯示其分布,那就太好了。
先感謝您
p / s:如何改善RNG並使其更加隨機?
我會嘗試random.rand和matplotlib。
import numpy as np
import matplotlib.pyplot as plt
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2 # 0 to 15 point radiuses
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()
像這樣嗎
編輯:您是否要生成偽隨機數? 無論如何,您都需要為移位寄存器提供種子,因此在這方面,我不確定它是否將是完全隨機的。
如果您只需要視覺表示,就可以輕松使用
import matplotlib.pyplot as plt
# Random class here
ranNum = Random()
randNums = [ranNum.get_ran_num() for _ in range(100)]
nums = list(range(len(randNums)))
plt.plot(nums, randNums, 'ro')
plt.show()
但是,當我進入更高的范圍時會遇到IndexError
。 您可能應該修復導致該問題的實際算法,但是我對它施加創可貼的方式是:
def get_ran_num(self):
""" Random.get_ran_num() -> return a random integer from 1 thru 10"""
retval = None
while True:
try:
self.random()
retval = int(list(str(int(self.seed)))[3])
break
except IndexError as e:
continue
return retval
這是一個100,000個隨機數的圖,非常好。 您所追求的是連續的線條,其中沒有一條比其他線條更密集,但是您將需要進行更好的熵分析,以找出比快速可視表示更有用的東西。 在您的情況下,看起來6更受歡迎。 同樣,它看起來很重復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.