[英]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.