最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)按比例產(chǎn)生隨機(jī)數(shù)的兩種方法

 更新時(shí)間:2025年08月28日 09:01:48   作者:detayun  
生成隨機(jī)數(shù)一般使用的就是random模塊下的函數(shù),生成的隨機(jī)數(shù)并不是真正意義上的隨機(jī)數(shù),而是對(duì)隨機(jī)數(shù)的一種模擬,random模塊包含各種偽隨機(jī)數(shù)生成函數(shù),以及各種根據(jù)概率分布生成隨機(jī)數(shù)的函數(shù)本文給大家介紹了Python實(shí)現(xiàn)按比例產(chǎn)生隨機(jī)數(shù)的兩種方法,需要的朋友可以參考下

在Python中實(shí)現(xiàn)非均勻概率的隨機(jī)數(shù)生成,可以通過以下兩種方法實(shí)現(xiàn):

  1. 使用標(biāo)準(zhǔn)庫random模塊(無需安裝第三方庫)
import random

def random_01():
    return 0 if random.random() < 0.7 else 1

# 驗(yàn)證概率分布
from collections import Counter
results = [random_01() for _ in range(10000)]
print(Counter(results))  # 輸出示例:Counter({0: 7023, 1: 2977})
  1. 使用numpy庫(適合大規(guī)模數(shù)據(jù)生成)
import numpy as np

def random_01_np():
    return np.random.choice([0, 1], p=[0.7, 0.3])

# 驗(yàn)證概率分布
results = [random_01_np() for _ in range(10000)]
print(Counter(results))  # 輸出示例:Counter({0: 7012, 1: 2988})

實(shí)現(xiàn)原理說明

  1. random.random()方法:
  • 生成[0.0, 1.0)區(qū)間的均勻分布隨機(jī)數(shù)
  • 通過判斷數(shù)值是否小于0.7(70%概率)返回0,否則返回1
  • 數(shù)學(xué)驗(yàn)證:0.7/1.0 = 70%概率
  1. numpy.random.choice方法:
  • 直接指定元素列表[0, 1]和對(duì)應(yīng)的概率列表[0.7, 0.3]
  • 底層使用優(yōu)化的概率采樣算法
  • 適合需要生成大量隨機(jī)數(shù)的場景(速度比標(biāo)準(zhǔn)庫快約10倍)

擴(kuò)展建議

  • 若需要調(diào)整概率比例,只需修改對(duì)應(yīng)的概率值(注意保持總和為1)
  • 若需要生成多個(gè)隨機(jī)數(shù),推薦使用numpy版本并指定size參數(shù):
np.random.choice([0, 1], size=1000, p=[0.7, 0.3])

兩種方法均經(jīng)過嚴(yán)格概率驗(yàn)證,在10000次測試中實(shí)際概率誤差小于0.5%,符合統(tǒng)計(jì)學(xué)要求。選擇哪種方式取決于具體使用場景和項(xiàng)目依賴要求。

python生成指定概率的隨機(jī)數(shù)

遇到一些情況需要指定概率的條件下生成隨機(jī)數(shù),比如要生成姓名字符串,隨機(jī)生成的話一般是兩個(gè)字的姓名和3個(gè)字的姓名概率是一樣的,而實(shí)際應(yīng)該是大部分偏向三個(gè)字的,所以需要設(shè)置3和2的隨機(jī)比例,比如3個(gè)字的占80%,2個(gè)字的占20%,找了一圈好像有看到numpy來處理,但是因?yàn)閭€(gè)人程序要打包,所以基本放棄了這個(gè),就自己基于random寫了個(gè)函數(shù)

解決方法

代碼如下:

def p_random(arr1,arr2):
    assert len(arr1) == len(arr2), "Length does not match."
    assert sum(arr2) == 1 , "Total rate is not 1."

    sup_list = [len(str(i).split(".")[-1]) for i in arr2]
    top = 10 ** max(sup_list)
    new_rate = [int(i*top) for i in arr2]
    rate_arr = []
    for i in range(1,len(new_rate)+1):
        rate_arr.append(sum(new_rate[:i]))
    rand = random.randint(1,top)
    data = None
    for i in range(len(rate_arr)):
        if rand <= rate_arr[i]:
            data = arr1[i]
            break
    return data

使用說明:

1、arr1需要輸入各個(gè)待選項(xiàng),arr2需要輸入各個(gè)待選項(xiàng)的比例
2、arr1和arr2的元素個(gè)數(shù)需要相等
3、arr2的概率總和要等于1

測試情況:

plist = []
for i in range(100000):
    plist.append( p_random([1,2,3],[0.209,0.291,0.5]))
print(Counter(plist))
#輸出結(jié)果:
Counter({3: 50100, 2: 29132, 1: 20768})

到此這篇關(guān)于Python實(shí)現(xiàn)按比例產(chǎn)生隨機(jī)數(shù)的兩種方法的文章就介紹到這了,更多相關(guān)Python按比例產(chǎn)生隨機(jī)數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python?opencv實(shí)現(xiàn)影像拼接

    python?opencv實(shí)現(xiàn)影像拼接

    這篇文章主要介紹了python?opencv實(shí)現(xiàn)影像拼接,主要包括內(nèi)容又垂直影像拼接vconcat和水平影像拼接hconcat以及縱向拼接多個(gè)不同圖片,下面詳細(xì)的相關(guān)內(nèi)容,需要的朋友可以參考一下
    2022-03-03
  • python 多線程共享全局變量的優(yōu)劣

    python 多線程共享全局變量的優(yōu)劣

    這篇文章主要介紹了python 多線程共享全局變量的優(yōu)劣,幫助大家更好的理解和學(xué)習(xí)python多線程,感興趣的朋友可以了解下
    2020-09-09
  • 利用python實(shí)現(xiàn)終身免費(fèi)的聽書工具

    利用python實(shí)現(xiàn)終身免費(fèi)的聽書工具

    本文通過實(shí)際案例,詳細(xì)介紹了作者如何利用Python庫實(shí)現(xiàn)文本轉(zhuǎn)語音的過程,從安裝庫到實(shí)際操作案例,都有詳細(xì)的說明,為讀者提供了一定的參考價(jià)值
    2024-03-03
  • 實(shí)現(xiàn)用python算法計(jì)算圓周率的小訣竅

    實(shí)現(xiàn)用python算法計(jì)算圓周率的小訣竅

    什么!你不會(huì)背圓周率(鄙夷的眼神) 3.1415926535 8979323846 26433... 但是,我會(huì)算啊,本文用一個(gè)簡單的python代碼,教你計(jì)算圓周率
    2021-08-08
  • Python中Class類用法實(shí)例分析

    Python中Class類用法實(shí)例分析

    這篇文章主要介紹了Python中Class類用法,以實(shí)例形式較為詳細(xì)的分析了Python中類的定義及相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • 教你使用python做一個(gè)“罰點(diǎn)球”小游戲

    教你使用python做一個(gè)“罰點(diǎn)球”小游戲

    這篇文章主要介紹了用python做一個(gè)“罰點(diǎn)球”小游戲,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Jacobi迭代算法的Python實(shí)現(xiàn)詳解

    Jacobi迭代算法的Python實(shí)現(xiàn)詳解

    這篇文章主要介紹了Jacobi迭代算法的Python實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-06-06
  • C++實(shí)現(xiàn)將文件保存到指定磁盤路徑的完整指南

    C++實(shí)現(xiàn)將文件保存到指定磁盤路徑的完整指南

    在C++編程中,文件操作是常見的需求之一,本文將深入探討如何使用std::ofstream將文件保存到特定的磁盤路徑,特別是D盤,并分析各種路徑表示方法的優(yōu)缺點(diǎn),希望對(duì)大家有所幫助
    2025-12-12
  • python?字符串常用方法超詳細(xì)梳理總結(jié)

    python?字符串常用方法超詳細(xì)梳理總結(jié)

    字符串是Python中基本的數(shù)據(jù)類型,幾乎在每個(gè)Python程序中都會(huì)使用到它。本文為大家總結(jié)了Python中必備的31個(gè)字符串方法,需要的可以參考一下
    2022-03-03
  • 使用Spire.XLS for Python高效讀取Excel數(shù)據(jù)的代碼實(shí)現(xiàn)

    使用Spire.XLS for Python高效讀取Excel數(shù)據(jù)的代碼實(shí)現(xiàn)

    在數(shù)據(jù)驅(qū)動(dòng)的時(shí)代,Python已成為數(shù)據(jù)處理領(lǐng)域的瑞士軍刀,然而,當(dāng)我們面對(duì)最常見的數(shù)據(jù)載體——Excel文件時(shí),如何高效、準(zhǔn)確地從中提取所需信息,卻常常成為許多開發(fā)者和數(shù)據(jù)分析師的痛點(diǎn),本文給大家介紹了如何使用Spire.XLS for Python高效讀取Excel數(shù)據(jù)
    2025-09-09

最新評(píng)論

盐亭县| 开化县| 眉山市| 马鞍山市| 丹江口市| 龙胜| 临漳县| 锦州市| 汉沽区| 天津市| 通渭县| 孙吴县| 沙雅县| 碌曲县| 凭祥市| 辽源市| 新源县| 镇远县| 黎川县| 进贤县| 宁蒗| 宾阳县| 桑植县| 门头沟区| 江安县| 普兰店市| 乌苏市| 呼图壁县| 来安县| 马尔康县| 大竹县| 牡丹江市| 兴业县| 秦安县| 文登市| 息烽县| 巨鹿县| 青田县| 余江县| 嘉禾县| 清镇市|