簡體   English   中英

我編寫了一個簡單的隨機數生成器,如何繪制我編寫的函數的分布圖?

[英]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()

這是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更受歡迎。 同樣,它看起來很重復。

在此處輸入圖片說明

我希望直方圖可以檢查隨機數生成器的分布均勻性。

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

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM