隨機數生成

2021-09-05 09:48:19 字數 3946 閱讀 7498

今天學習了用python生成**資料的一些基本方法和技巧,寫成部落格和大家分享一下。    

本篇部落格主要講解如何從給定引數的的正態分佈/均勻分布中生成隨機數以及如何以給定概率從數字列表抽取某數字或從區間列表的某一區間內生成隨機數,按照內容將部落格分為3部分,並附上**。

1 從給定引數的正態分佈中生成隨機數

當考慮從正態分佈中生成隨機數時,應當首先知道正態分佈的均值和方差(標準差),有了這些,就可以呼叫python中現有的模組和函式來生成隨機數了。這裡呼叫了numpy模組中的random.normal函式,由於邏輯非參簡單,所有直接貼上**如下:

import numpy as np

# 定義從正態分佈中獲取隨機數的函式

def get_normal_random_number(loc, scale):

""":param loc: 正態分佈的均值

:param scale: 正態分佈的標準差

:return:從正態分佈中產生的隨機數

"""# 正態分佈中的隨機數生成

number = np.random.normal(loc=loc, scale=scale)

# 返回值

return number

# 主模組

if __name__ == "__main__":

# 函式呼叫

n = get_normal_random_number(loc=2, scale=2)

# 列印結果

print(n)

# 結果:3.275192443463058

2 從給定引數的均勻分布中獲取隨機數的函式

考慮從均勻分布中獲取隨機數的時候,要事先知道均勻分布的下界和上界,然後呼叫numpy模組的random.uniform函式生成隨機數。

import numpy as np

# 定義從均勻分布中獲取隨機數的函式

def get_uniform_random_number(low, high):

""":param low: 均勻分布的下界

:param high: 均勻分布的上界

:return: 從均勻分布中產生的隨機數

"""# 均勻分布的隨機數生成

number = np.random.uniform(low, high)

# 返回值

return number

# 主模組

if __name__ == "__main__":

# 函式呼叫

n = get_uniform_random_number(low=2, high=4)

# 列印結果

print(n)

# 結果:2.4462417140153114

3 按照指定概率生成隨機數

有時候我們需要按照指定的概率生成隨機數,比如已知盒子中每種顏色的球的比例,猜測下一次取出的球的顏色。在這裡介紹的問題和上面的例子相似,要求給定乙個概率列表,從列表對應的數字列表或區間列表中生成隨機數,分兩部分討論。

3.1 按照指定概率從數字列表中隨機抽取數字

假設給定乙個數字列表和乙個與之對應的概率列表,兩個列表對應位置的元素組成的元組即表示該數字在數字列表中以多大的概率出現,那麼如何根據這些已知條件從數字列表中按概率抽取隨機數呢?在這裡我們考慮用均勻分布來模擬概率,**如下:

import numpy as np

import random

# 定義從均勻分布中獲取隨機數的函式

def get_uniform_random_number(low, high):

""":param low: 均勻分布的下界

:param high: 均勻分布的上界

:return: 從均勻分布中產生的隨機數

"""# 均勻分布的隨機數生成

number = np.random.uniform(low, high)

# 返回值

return number

# 定義從乙個數字列表中以一定的概率取出對應區間中數字的函式

def get_number_by_pro(number_list, pro_list):

""":param number_list:數字列表

:param pro_list:數字對應的概率列表

:return:按概率從數字列表中抽取的數字

"""# 用均勻分布中的樣本值來模擬概率

x = random.uniform(0, 1)

# 累積概率

cum_pro = 0.0

# 將可迭代物件打包成元組列表

for number, number_pro in zip(number_list, pro_list):

cum_pro += number_pro

if x < cum_pro:

# 返回值

return number

# 主模組

if __name__ == "__main__":

# 數字列表

num_list = [1, 2, 3, 4, 5]

# 對應的概率列表

pr_list = [0.1, 0.3, 0.1, 0.4, 0.1]

# 函式呼叫

n = get_number_by_pro(number_list=num_list, pro_list=pr_list)

# 列印結果

print(n)

# 結果:1

3.2 按照指定概率從區間列表中的某個區間內生成隨機數

給定乙個區間列表和乙個與之對應的概率列表,兩個列表相應位置的元素組成的元組即表示某數字出現在某區間內的概率是多少,已知這些,我們如何生成隨機數呢?這裡我們通過兩次使用均勻分布達到目的,**如下:

import numpy as np

import random

# 定義從均勻分布中獲取隨機數的函式

def get_uniform_random_number(low, high):

""":param low: 均勻分布的下界

:param high: 均勻分布的上界

:return: 從均勻分布中產生的隨機數

"""# 均勻分布的隨機數生成

number = np.random.uniform(low, high)

# 返回值

return number

# 定義從乙個數字列表中以一定的概率取出對應區間中數字的函式

def get_number_by_pro(number_list, pro_list):

""":param number_list:數字列表

:param pro_list:數字對應的概率列表

:return:按概率從數字列表中抽取的數字

"""# 用均勻分布中的樣本值來模擬概率

x = random.uniform(0, 1)

# 累積概率

cum_pro = 0.0

# 將可迭代物件打包成元組列表

for number, number_pro in zip(number_list, pro_list):

cum_pro += number_pro

if x < cum_pro:

# 從區間[number. number - 1]上隨機抽取乙個值

num = get_uniform_random_number(number, number - 1)

# 返回值

return num

# 主模組

if __name__ == "__main__":

# 數字列表

num_list = [1, 2, 3, 4, 5]

# 對應的概率列表

pr_list = [0.1, 0.3, 0.1, 0.4, 0.1]

# 函式呼叫

n = get_number_by_pro(number_list=num_list, pro_list=pr_list)

# 列印結果

print(n)

隨機生成隨機數

現畫乙個command命令按鈕,進行貼上。private sub command1 click show me scale 0,0 18,8 me.auto redraw true me.draw mode 2 circle 3,4 3,vb red me.auto redraw false lin...

隨機數生成

原型 void srand unsigned seed 用法 srand和rand 配合使用產生偽隨機數序列。rand函式在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次呼叫rand函式生成的偽隨機數序列都是一樣的。sr...

生成隨機數

1 生成num位數驗證碼 用於簡訊驗證功能 public static random rand new random public static string getcode int num result,s k return result random r new random 建立乙個隨機數生成...