Python 內置模塊之 random

常用API?

import random# 隨機小數
print(random.random())      # 大于0且小于1之間的小數。0<= n<1.0
print(random.uniform(1,3))  # 大于1小于3的小數# 隨機整數
print(random.randint(1,5))      # 大于等于1且小于等于5之間的整數#從指定范圍內,按指定基數遞增的集合中 獲取一個隨機數。
random.randrange([start], stop[, step])
random.randrange(10, 30, 2)   # 結果相當于從[10, 12, ... 26, 28]序列中獲取一個隨機數。
random.randrange(10, 30, 2)   # 在結果上與 random.choice(range(10, 30, 2) 等效。# 隨機選擇一個返回
print(random.choice([1,'23',[4,5]]))     # 1或者23或者[4,5]
# 隨機選擇多個返回,返回的個數為函數的第二個參數
print(random.sample([1,'23',[4,5]],2))   # 列表元素任意2個組合[[4, 5], '23']# 打亂列表順序
item=[1,3,5,7,9]
random.shuffle(item) # 打亂次序
print(item)         # [5, 1, 3, 7, 9]
random.shuffle(item)
print(item)         # [5, 9, 7, 1, 3]

加權隨機算法實現

方法一

最簡單的方法可以這樣:把序列按權重值擴展成:lists=[A,A,A,A,A,B,B,C,C,D],然后random.choice(lists)隨機選一個就行。雖然這樣選取的時間復雜度是O(1),但是數據量一大,空間消耗就太大了。

# coding:utf-8
import randomdef weight_choice(list, weight):""":param list: 待選取序列:param weight: list對應的權重序列:return:選取的值"""new_list = []for i, val in enumerate(list):new_list.extend(val * weight[i])return random.choice(new_list)if __name__ == "__main__":print(weight_choice(['A', 'B', 'C', 'D'], [5, 2, 2, 1]))

?

?

方法二

比較常用的方法是這樣:計算權重總和sum,然后在1到sum之間隨機選擇一個數R,之后遍歷整個集合,統計遍歷的項的權重之和,如果大于等于R,就停止遍歷,選擇遇到的項。

還是以上面的集合為例,sum等于10,如果隨機到1-5,則會在遍歷第一個數字的時候就退出遍歷。符合所選取的概率。

選取的時候要遍歷集合,它的時間復雜度是O(n)。

?

# coding:utf-8
import randomlist = ['A', 'B', 'C', 'D']def weight_choice(weight):""":param weight: list對應的權重序列:return:選取的值在原列表里的索引"""t = random.randint(0, sum(weight) - 1)for i, val in enumerate(weight):t -= valif t < 0:return iif __name__ == "__main__":print(list[weight_choice([5, 2, 2, 1])])

方法三

可以先對原始序列按照權重排序。這樣遍歷的時候,概率高的項可以很快遇到,減少遍歷的項。(因為rnd遞減的速度最快(先減去最大的數))比較{A:5,B:2,C:2,D:1}和{B:2,C:2,A:5,D:1}前者遍歷步數的期望是5/10*1+2/10*2+2/10*3+1/10*4=19/10而后者是2/10*1+2/10*2+5/10*3+1/10*4=25/10。這樣提高了平均選取速度,但是原序列排序也需要時間。先搞一個權重值的前綴和序列,然后在生成一個隨機數t后,可以用二分法來從這個前綴和序列里找,那么選取的時間復雜度就是O(logn)了。

# coding:utf-8
import random
import bisectlist = ['A', 'B', 'C', 'D']def weight_choice(weight):""":param weight: list對應的權重序列:return:選取的值在原列表里的索引"""weight_sum = []sum = 0for a in weight:sum += aweight_sum.append(sum)t = random.randint(0, sum - 1)return bisect.bisect_right(weight_sum, t)if __name__ == "__main__":print(list[weight_choice([5, 2, 2, 1])])

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453980.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453980.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453980.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微信jssdk遇到的一些問題匯總

1.用戶手動去觸發的接口可以直接調用比如wx.startRecord(); 但是寫在頁面加載完成里就無效&#xff0c;需要寫在 wx.ready(function(){wx.startRecord(); }); 才會有效。 2.h5 的audio標簽只支持ogg,mp3,wav格式的音頻&#xff0c;微信jssdk錄制的是amr格式的語音文件&#xf…

mongodb簡單的增刪改查

數據庫操作&#xff1a; show dbs;#查看數據庫use test;#如果沒有就創建一個db;#查看當前數據庫db.dropDatabase();#刪除數據庫 數據操作&#xff1a;show collections&#xff1b;#查看集合創建集合、插入&#xff1a;create collection;#創建集合db.student.insert({"na…

ffmpeg-0.8 開源編碼解碼庫從linux下移植到windows vs2005

最新 ffmpeg-0.8 開源編碼解碼庫&#xff0c;從linux下移植到windows vs2005&#xff0c;全部開源。需要 Intel C Compile 和 開源的SDL庫支持&#xff0c;由于 Intel C Compile支持C99語法&#xff0c;所以源代碼改動很小很小。主要的修改1&#xff1a;添加了linux中有而windo…

python3.5.2使用教程_Python3.5.2-初級教程.docx

Python3.5.2-初級教程Python 初級教程Release:3.5.2引言Python 是一門簡單易學且功能強大的編程語言。它擁有高效的高級數據結構&#xff0c;并且能夠用簡單而又高效的方式進行面向對象編程。Python 優雅的語法和動態類型&#xff0c;再結合它的解釋性&#xff0c;使其在大多數…

Flask 離線腳本

1. 在 __init__.py中創建db對象from flask_sqlalchemy import SQLAlchemy# 包含了SQLAlchemy相關的所有操作db SQLAlchemy()2. 在 __init__.py中create_app函數中讓將app傳入到db中def create_app():app Flask(__name__)app.config.from_object(settings.DevelopmentConfig)f…

day13 迭代器和生成器

一、上節回顧和作業講解&#xff1a; 1、如果這個網頁沒有被爬取過就真的去訪問這個網頁&#xff0c;否則就返回之前訪問的時候緩存文件中的內容 &#xff08;重要的例子&#xff09; from urllib.request import urlopen def wrapper(func):def inner(*args, **kwargs):with o…

Centos7.0 搭建Zabbix環境

實驗環境&#xff1a;Centos7.0IP:192.168.47.140關閉iptables及setenforce導入源 rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm安裝zabbix包安裝完成安裝mysql源wget http://repo.mysql.com/mysql-community-release-el7-5…

用線性插值算法實現圖像縮放

用線性插值算法實現圖像縮放 猛禽[Mental Studio](個人專欄)(BLOG) http://mental.mentsu.com 在Windows中做過圖像方面程序的人應該都知道Windows的GDI有一個API函數&#xff1a;StretchBlt&#xff0c;對應在VCL中是TCanvas類的StretchDraw方法。它可以很簡單地實現圖像的縮放…

蒙特卡洛分析 pmp_PMP基礎名詞介紹 | 59. 實施定量風險分析

點擊上方藍字關注我們你好&#xff0c;這是“兔子研習社”為管理新手推出的“PMP基礎名詞介紹”系列內容。如果你正打算轉到管理崗位&#xff0c;或者想要學習國際通行的項目管理知識&#xff0c;那恭喜你&#xff0c;這里滿滿的干貨會讓你不虛此行。實施定量風險分析是就已識別…

深度學習案例之基于 CNN 的 MNIST 手寫數字識別

一、模型結構 本文只涉及利用Tensorflow實現CNN的手寫數字識別,CNN的內容請參考:卷積神經網絡(CNN) MNIST數據集的格式與數據預處理代碼input_data.py的講解請參考 :Tutorial (2) 二、實驗代碼 # -*- coding:utf-8 -*- """Time : Author: Feng LepengFile …

怎樣獲取linux命令幫助?

獲得命令使用幫助&#xff1a;內部命令&#xff1a;help COMMAND外部命令&#xff1a;COMMAND --help &#xff08;大多數命令有help選項&#xff09;命令手冊&#xff1a;manualman [章節號] COMMAND其中man數據庫是分章節的&#xff0c;相同的COMMAND出現在不同的章節表示…

編譯安裝 zbar 時兩次 make 帶來的驚喜

為了裝 php 的條形碼擴展模塊 php-zbarcode&#xff0c;先裝了一天的 ImageMagick 和 zbar。也許和我裝的 Ubuntu 17.10 的有版本兼容問題吧&#xff0c;總之什么毛病都有&#xff0c;apt 不行&#xff0c;PPA 源也不行&#xff0c;編譯安裝還有幾處源代碼出錯&#xff0c;裝不…

python數組的乘法_在Python中乘法非常大的2D數組

我必須在Python中將非常大的2D數組乘以大約100次.每個矩陣由3200032000元素組成.我正在使用np.dot(X,Y),但是每次乘法都需要很長時間…在我的代碼實例下面&#xff1a;import numpy as npX Nonefor i in range(100)multiplying Trueif X None:X generate_large_2darray()mu…

0階指數哥倫布編碼

指數哥倫布編碼 規定語法元素的編解碼模式的描述符如下&#xff1a; 比特串&#xff1a; b(8):任意形式的8比特字節&#xff08;就是為了說明語法元素是為8個比特&#xff0c;沒有語法上的含義&#xff09; f(n):n位固定模式比特串&#xff08;其值固定&#xff0c;如forbidde…

TensorFolw 報錯

1、報錯1&#xff1a;ValueError: Only call softmax_cross_entropy_with_logits with named arguments (labels..., logits..., ...) 提示出錯如下&#xff1a; Traceback (most recent call last):File "/MNIST/softmax.py", line 12, in <module>cross_en…

CentOS7種搭建FTP服務器

安裝vsftpd 首先要查看你是否安裝vsftp [rootlocalhost /]# rpm -q vsftpd vsftpd-3.0.2-10.el7.x86_64 #顯示也就安裝成功了&#xff01; 如果沒有則安裝vsftpd [rootlocalhost/]# yum install -y vsftpd 完成后再檢查一遍 [rootlocalhost /]# whereis vsftpd vsf…

js循環

順序——要加分號結束 分支&#xff1a;讓程序根據條件不同執行不同的代碼 if else語句用來做分支的 if&#xff08;條件&#xff09;{代碼} if&#xff08;條件&#xff09;{代碼}else{代碼} else if&#xff08;條件&#xff09;{代碼} if是嵌套。 switch...case&#xff1…

x264函數調用關系圖

1 encoder 2 slice write 3 analyse FFMPEG中MPEG-2編解碼函數調用關系圖 1 Encoder &#xff08;函數調用從左到右&#xff0c;下同&#xff1b;圖片顯示不全時&#xff0c;請下載顯示&#xff09; 2 P幀運動估計流程圖 3 B幀運動估計流程圖 4 decoder ffmpeg的mpeg2編碼I幀代…

Tensorflow 加載預訓練模型和保存模型

使用tensorflow過程中&#xff0c;訓練結束后我們需要用到模型文件。有時候&#xff0c;我們可能也需要用到別人訓練好的模型&#xff0c;并在這個基礎上再次訓練。這時候我們需要掌握如何操作這些模型數據。看完本文&#xff0c;相信你一定會有收獲&#xff01; 一、Tensorfl…

在 ActiveReports 中嵌入 Spread 控件

Spread 是一款很出色的表格控件&#xff0c;Spread 可以使開發人員把具有兼容 Microsoft Excel 的電子表格添加到程序中。ActiveReports 提供了一個非常靈活的、簡單的報表環境。下面將展示怎樣在 ActiveReports 中使用 Spread for WinForm。和其他三方控件一樣&#xff0c;Spr…