我写了一个简单的随机数生成器,我如何绘制我写的函数的分布图?

时间:2016-03-08 01:17:46

标签: python random statistics

这是我第一次编写一个随机数生成器,我只是乱搞,看看我可以用随机公式做什么。

然而,我很好奇我的功能是多么偏向以及功能的分布(在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并使其成为随机的?

3 个答案:

答案 0 :(得分:1)

我会尝试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()

这样的东西?

编辑:您是否尝试生成伪随机数?无论如何,你需要一个移位寄存器的种子,所以在这方面,我不确定它是否完全是随机的。

答案 1 :(得分:1)

如果您只想要一个视觉表示,您可以很容易地使用

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()

这是100个随机数: https://i.gyazo.com/bd3f11fb80de18797dc888138d5e5113.png

然而,当我去更高的范围时,我得到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更受欢迎。此外,看起来它经常重复。

enter image description here

答案 2 :(得分:0)

我更喜欢直方图,以检查随机数发生器的分布均匀性。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt 
myarr = np.random.randint(1000, size=100000)
plt.hist(myarr, bins=40)
plt.show()

enter image description here