五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網 會員登陸 & 注冊

Python模塊random, math

2023-07-20 17:15 作者:水母山楂  | 我要投稿

〇、前言

本系列(指Python Moudules系列)每篇介紹一個或多個內容沒有特別多模塊

模塊介紹依賴官方文檔(https://docs.python.org/zh-cn/3.8/library/index.html)或其他第三方官方文檔,主要是對其內容的補充和拓展

內容大部分來源官方文檔,少部分來源網絡。太過深奧的內容會只寫出不介紹,或省略,或省略掉太過深奧的部分(例如省略部分參數),或通過補充介紹(補充介紹的前面通常會有參考網址)

注意內容非常依賴編號。內容中類的展示方式是"編號<數字>."表示類的構造方法(__init__),"編號<數字>.<數字>"表示類的方法或屬性,方法一般是實例方法,其他方法會在前面?zhèn)渥?,屬性一般是實例屬性,類屬性會在后面?zhèn)渥?。如果構造方法無需傳參會直接展示類名

使用Python版本3.8,但也會補充高版本的修改和添加內容。系統(tǒng)Windows 7

系列WPS筆記及其他內容的百度網盤鏈接:

https://pan.baidu.com/s/1fTwjyoM81_OOAccPNhGE9Q?pwd=h3fg

顏色代表含義:

淡灰色:注釋,一般前面有#

綠色:示例

橙色:拓展

紫色:示例中的input用戶輸入內容

紅色、藍色:突出或裝飾文字作用

部分內容可能不嚴謹或者錯誤,歡迎指出

一、random——生成偽隨機數

(1)、概述

random內置模塊實現(xiàn)了各種分布的偽隨機數生成器。此模塊的偽隨機生成器不應用于安全目的,有關安全性或加密用途參閱secrets模塊

(2)、函數

# 這個模塊提供的函數實際上是random.Random類的隱藏實例的綁定方法,所以在Pychram的補全代碼中顯示的不是函數標識

1.?seed(a=None)

初始化隨機數生成器

a必須是NoneType、int、float、str、bytes或bytearray類型作為隨機數生成的種子,被省略或為None的情況下,則使用當前系統(tǒng)時間。如果操作系統(tǒng)提供隨機源,則使用它們(如果可用)

# None是NoneType類型的唯一實例

2.?random()

返回半開半閉區(qū)間[0.0, 1.0)范圍內的下一個隨機浮點數

# 幾乎所有模塊函數都依賴于此函數

3.?getstate()

返回捕獲生成器當前內部狀態(tài)的對象。這個對象可以傳遞給setstate()來恢復狀態(tài)

4.?setstate(state)

將生成器的內部狀態(tài)恢復到調用getstate()獲得狀態(tài)對象state時的狀態(tài)

5.?getrandbits(k)

返回具有k個隨機比特位的Python整數

# 比特位就是位(bit),0或1表示值

# 此函數在Python3.9可以傳入0作為k的參數,在之前必須傳入正整數

示例:

運行結果:

4 8 1 0.608733405172185

4 8 1 9 9 0.608733405172185

6.?choice(seq)

從非空序列seq返回一個隨機元素。如果seq為空,則引發(fā)IndexError

7.?choices(population, weights=None, *, cum_weights=None, k=1)

從population中有重復地隨機選取元素,返回大小為k的元素列表。如果population為空,則引發(fā)IndexError

weights——是一個序列,如果指定則根據相對權重進行選擇

cum_weights——是一個序列,如果指定則根據累積權重進行選擇

# 關于累積權重,例如相對權重[10, 5, 30, 5]相當于累積權重[10, 15, 45 ,50],10為相對權重的第一個元素,15為第一個元素加第二個元素,以此類推

在內部,相對權重在進行選擇之前會轉換為累積權重,因此提供累積權重可以節(jié)省工作量

如果既未指定weights也未指定cum_weights,則以相等的概率進行選擇;如果既指定weights也指定cum_weights,則引發(fā)TypeError

如果提供了權重序列(weights或cum_weights),則它必須與population序列的長度相同。權重值可使用random()鎖返回的能與float值進行互相運算的任何數字類型(包括整數、浮點數、分數但不包括decimal)。權重值應當非負且為有限的數值

# 有限的數值指不是inf、-inf之類的數值

# 在高版本Python中,權重值的和必須大于零,否則引發(fā)ValueError異常,而在Python3.8中不會,權重值應當為非負數且總和大于零

對于給定的種子,具有相等加權的choices()函數通常產生與重復調用choice()不同的序列。choices()使用的算法使用浮點運算來實現(xiàn)內部一致性和速度。choice()使用的算法默認為重復選擇的整數運算,以避免因舍入誤差引起的小偏差

示例:

運行結果:

3

[2]

[1, 2, 2, 1, 2]??# 列表中之前選擇過的元素可重復選擇

8.?randrange(stop)/randrange(start, stop[, step])

從range(start, stop, step)返回一個隨機選擇的元素。相當于choice(range(start, stop, step)),但實際上并沒有構建一個range對象

應使用位置參數傳參,位置參數匹配range()。不應使用關鍵字參數傳參,因為此函數可能以意外的方式使用它們

# 例如randrange(start=100)被解釋成了randrange(0, 100, 1)

# 在Python3.12中,傳入非整數類型都會拋出TypeError

9.?randint(a, b)

返回隨機整數N,滿足a <= N <= b。相當于randrange(a, b+1)

10.?shuffle(x)

將序列x隨機打亂位置。x需要是一個可變的序列,打亂會在序列x上進行。要改變一個不可變的序列并返回一個新的打亂列表請使用sample(x, k=len(x))

# 即使對于長度小的序列,序列的排列組合總數也會快速增長,大于大多數隨機數生成器的周期,也就意味著長序列大多數的排列組合永遠不會產生

11.?sample(population, k)

返回從總體序列或集合population中選擇的唯一元素的k長度列表。用于無重復的隨機抽樣

# 與choices()相比,choices()會重復的隨機抽樣

# 在3.11版本中,population如果是集合,將不會自動轉換為列表

# 返回列表的子切片也是有效的隨機樣本

# population的元素可以重復

# 從一系列整數中選擇樣本,可使用range()對象作為參。對于從大量人群中采樣,這種方法特別迅速且節(jié)省空間,例如sample(range(10000000), k=60)

如果樣本大小k大于總體大小len(population),則引發(fā)ValueError

示例:

運行結果:

2

8

0

[4, 1, 3, 2, 5]

[3, 3, 2, 1]

[36, 33, 75, 38, 7]


12.?uniform(a, b)

返回一個隨機浮點數N,當a <= b時a <= N <= b,當b < a時b <= N <= a

# b可以包括或不包括在該范圍內,取決于等式a + (b-a) * random()中的浮點取舍

13.?triangular(low, high, mode)

三角形分布。返回一個隨機浮點數N,使得low <= N <= high,并且偏向一個極端mode(眾數)。low和high邊界默認為0和1。mode參數默認為邊界之間的中點,給出對稱分布

14.?betavariate(alpha, beta)

Beta分布。參數的條件是alpha > 0和beta > 0。返回值的范圍介于0和1之間

補充:matplotlib第三方模塊

matplotlib是Python的繪圖庫,它能讓使用者很輕松地將數據圖形化,并且提供多樣化的輸出格式,可以用來繪制各種靜態(tài),動態(tài),交互式的圖表

下面將會使用這個模塊pyplot子庫的兩個函數: ?# 并未給出全部可選參數

hist(x, bins=None, color=None)

計算并繪制直方圖

x——指定要繪制直方圖的數據,單一的數組([x0, x1])或一個數組序列(二維數組),每個數組中每個序列代表一個數據集

bins——設置長條形的數目

color——設置顏色,傳入顏色('r', 'g, 'b'之類的字符串)或顏色序列,顏色序列中每個顏色對應一個數據集

show()

用于顯示所有圖形

示例:

運行結果:

?

紅色為0.0~1.0的隨機浮點數;綠色是三角形分布,偏向0.8;藍色和黃色是beta分布


15.?expovariate(lambd)

指數分布。lambd是1.0除以所需的平均值,它應該是非零的。如果lambd為正,則返回值的范圍為0到正無窮大;如果lambd為負,則返回值從負無窮大到0

# 因為"lambda"是Python的保留字,所以該參數叫做"lambd"

# 在3.12版本中添加了lambd的默認值1.0

16.?gammavariate(alpha, beta)

Gamma分布(不是gamma函數)。參數的條件是alpha > 0和bata > 0

概率分布函數是:

pdf(x)%20%3D%20%5Cfrac%7Bx%20**%20(alpha%20-%201)%20*%20math.exp(-x%20%2F%20beta)%7D%7Bmath.gamma(alpha)%20*%20beta%20**%20alpha%7D%20

17.?gauss(mu, sigma)

正態(tài)分布,也稱高斯分布。mu為平均值,而sigma為標準差。此函數要稍快于下面所定義的normalvariate()函數

# 多線程需要注意當兩個線程同時調用此方法時,它們有可能獲得相同的返回值??赏ㄟ^三種辦法來避免。1)讓每個線程使用不同的隨機數生成器實例。2)在所有調用外面加鎖。3)改用速度較慢但是線程安全的normalvariate()函數

# 在3.11版本中添加了mu和sigma的默認值0.0和1.0

18.?lognormvariate(mu, sigma)

對數正態(tài)分布。如果你采用這個分布的自然對數,你將得到一個正態(tài)分布,平均值為mu和標準差為 sigma。mu可以是任何值,sigma必須大于零

19.?normalvariate(mu, sigma)

正態(tài)分布。mu是平均值,sigma是標準差

# 在3.11版本中添加了mu和sigma的默認值0.0和1.0

20.?vonmisesvariate(mu, kappa)

馮·米塞斯分布。mu是平均角度,以弧度表示,介于0和2*pi之間,kappa是濃度參數,必須大于或等于零。如果kappa等于零,則該分布在0到2*pi的范圍內減小到均勻的隨機角度

21.?paretovariate(alpha)

帕累托分布。alpha是形狀參數

22.?weibullvariate(alpha, beta)

威布爾分布。alpha是比例參數,beta是形狀參數


(3)、類(替代生成器)

1.?Random([seed])

該類實現(xiàn)了random模塊所用的默認偽隨機生成器

2.?SystemRandom([seed])

使用os.urandom()函數的類,用從操作系統(tǒng)提供的源生成隨機數

# 不依賴于軟件狀態(tài),序列不可重現(xiàn)。因此seed參數和seed()方法沒有效果而被忽視。getstate()和setstate()方法如果被調用則引發(fā)NotImplementedError

補充:os.urandom(size)

返回大小為size的字符串,它是適合加密使用的隨機字節(jié)

此函數從系統(tǒng)指定的隨機源獲取隨機字節(jié)。對于加密應用程序,返回的數據應有足夠的不可預測性,盡管其確切的品質取決于操作系統(tǒng)的實現(xiàn)

在Windows上將使用CryptGenRandom() ?# C++的函數

示例:

運行結果: ?# 其中一次運行結果

0.13436424411240122 0.9560342718892494 0.5098685665328395

# r3隨機出來的值是不固定的


二、math——數學函數

(1)、概述

math內置模塊為浮點運算提供了對底層C函數庫的訪問

(2)、函數

# 這些函數不適用于復數,計算復數請使用cmath模塊中的同名函數

# 下面函數除非另有說明,否則所有返回值均為浮點數

1.?ceil(x)

返回x的向上取整,即大于或等于x的最小整數。如果x不是浮點數,委托給x.__ceil__(),它應該返回一個Integral(通常為int)的值

2.?floor(x)

返回x的向下取整,即小于或等于x的最大整數。如果x不是浮點數,委托給x.__floor__(),它應該返回一個Integral(通常為int)的值

# ceil()和floor()的返回值都是整數

3.?comb(n, k)

返回不重復且無順序地從n項中選擇k項的方式總數。返回值是一個整數

當k <= n時取值為n! / (k! * (n - k)!);當k > n時取值為零

也叫二項式系數,因為它相當于(1 + x)的n次方的多項式展開中第k項的系數

如果任一參數不為整數則會引發(fā)TypeError,為負數則會引發(fā)ValueError

4.?perm(n, k=None)

返回不重復且有順序地從n項中選擇k項的方式總數。返回值是一個整數

當 k <= n 時取值為n! / (n - k)!;當k > n時取值為零

如果k未指定或為None,則k的默認值為n并且函數將返回n!

如果任一參數不為整數則會引發(fā)TypeError,為負數則會引發(fā)ValueError

5.?factorial(x)

以整數形式返回x的階乘。如果x不是整數或為負數則引發(fā)ValueError

# 在3.9版本后接受具有整數值的浮點數(像5.0)的行為已被棄用

示例:

運行結果:

3

2

10

60

120

6.?copysign(x, y)

返回一個基于x的絕對值和y的符號的浮點數

7.?fabs(x)

返回x的絕對值

# 與內置函數abs()的區(qū)別是返回值是浮點數

8.?fmod(x, y)

返回x除以y的余數

# 與x % y的區(qū)別是返回值是浮點數。此函數在使用浮點數時通常是首選

9.?frexp(x)

以(m, e)對的形式返回x的尾數和指數

m是一個浮點數,e是一個整數,正好是x == m * 2**e

如果x為零,則返回(0.0, 0),否則0.5 <= abs(m) < 1

這用于以可移植方式“分離”浮點數的內部表示

補充:浮點數

浮點數是值用符號、尾數、基數和指數四部分表示的小數

因為計算機內部使用二進制數,所以基數為2

10.?fsum(iterable)

返回可迭代對象iterable中數值的精確浮點和。通過跟蹤多個中間部分和來避免精度損失

示例:

運行結果:

-1.0

200.0

5.0 5

(0.5, 3)

9.99999999999998 10.0

11.?gcd(a, b)

返回整數a和b的最大公約數。如果a或b之一非零,則返回值是能夠同時整除a和b的最大正整數。gcd(0, 0)返回0

# 在3.9版本允許任意數量的參數,且不帶參數的gcd()返回0

# 在3.9版本有l(wèi)cm()函數,返回給定整數參數的最小公倍數

12.?isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)

若a和b的值比較接近則返回True,否則返回False

此函數根據給定的絕對和相對容差確定兩個值是否被認為是接近的

沒發(fā)生錯誤的情況下,結果是:abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)

rel_tol——相對容差。它是a和b之間允許的最大差值,相對于a或b的較大絕對值。例如,值0.05意味著設置5%的容差。默認容差為1e-09,確保兩個值在大約9位十進制數字內相同。rel_tol必須大于零

abs_tol——最小絕對容差。對于接近零的比較很有用。abs_tol必須為非負數

特殊值NaN不被認為接近任何其他值,包括NaN。inf和-inf只被認為接近自己

13.?isfinite(x)

如果x既不是正或負無窮大也不是NaN,則返回True,否則返回False

14.?isinf(x)

如果x是正或負無窮大則返回True,否則返回False

15.?isnan(x)

如果x是NaN則返回True,否則返回False


示例:

運行結果:

10

0.30000000000000004 0.3 True

True

True

False

False

True

16.?modf(x)

返回x的小數和整數部分。兩個結果都帶有x的符號并且是浮點數

# 返回二元組:(小數, 整數)

# 對于ceil(), floor(), modf()函數,注意所有足夠大的浮點數都是精確整數。Python浮點數通常不超過53位的精度,在這種情況下,任何滿足abs(x) >= 2**52的浮點x都必然沒有小數位(2**52=4503599627370496)

17.?ldexp(x, i)

返回x * (2**i)。這基本上是frexp()函數的反函數

18.?sqrt(x)

返回非負數x的平方根 ?# 算術平方根

# 在3.11版本使用cbrt()函數返回立方根

19.?isqrt(n)

返回非負整數n的平方根,并將平方根向下取整。相當于使得a2≤n的最大整數a

關于向上取整,對于正數n,可以使用1 + isqrt(n - 1)來計算

補充:正整數相除向上取整

ceil(a / b)或(a + b - 1) // b

# 向下取整使用floor(a / b)或a // b

20.?pow(x, y)

返回x的y次冪

pow(1.0, x)和pow(x, 0.0)總是返回1.0,即使x是零或NaN ?# 內置函數pow()通用

如果x和y都是有限的,x是負數,y不是整數,那么pow(x, y)是未定義的,并且引發(fā)ValueError

# 與內置的**和pow()的區(qū)別是參數會轉換為float類型,且返回float類型


示例:

運行結果:

(0.23399999999999999, 1.0)

4503599627370496.0 (0.0, 4503599627370496.0)

(0.5, 3) 4.0

2.0

1.7320508075688772 1 2

1 2

1 2

0 2

8.0 8

21.?prod(iterable, *, start=1)

計算輸入的可迭代對象iterable中所有元素的積

strat——積的起始值,默認為1

當可迭代對象為空時,返回起始值。此函數特別針對數字值使用,并會拒絕非數字類型

# 實測只要可迭代對象里的元素都可以相乘就可以。如果元素都是整數則返回整數,如果元素有浮點數(或start為浮點數)則返回浮點數

22.?remainder(x, y)

返回IEEE 754風格的x相對于y的余數。對于有限x和有限非零y,返回x - n*y的差,其中n是與x / y的商的精確值最接近的整數。如果x / y恰好位于兩個連續(xù)整數之間,則n是最接近的偶數。余數r = remainder(x, y)因此總是滿足abs(r) <= 0.5 * abs(y)

# IEEE 754:IEEE二進位浮點數算術標準

特殊情況遵循IEEE 754:對于任何有限x,remainder(x, math.inf)返回都是x;對于任何非NaN的x,remainder(x, 0)和remainder(math.inf, x)引發(fā)ValueError。如果余數運算的結果為零,則該零將具有與x相同的符號

在使用IEEE 754二進制浮點的平臺上,此操作的結果始終可以完全表示:不會引入舍入錯誤

23.?trunc(x)

返回x截斷整數的部分,即返回整數部分,忽略小數部分。委托給x.__trunc__()

# 返回值是整數


示例:

運行結果:

48

aaaaaa

-1.0

2 -1

2.0 2

12

24.?exp(x)

返回e的x次冪,其中e = 2.718281...是自然對數的基數。這通常比math.e ** x或pow(math.e, x)更精確

25.?expm1(x)

返回e的x次冪減1。這比調用math.exp(x) - 1更精確

補充:對數(logarithm)和自然對數(Natural logarithm) ?# 摘抄自百度百科

在數學中,對數是求冪的逆運算

如果a的x次方等于N(a>0,且a≠1),那么數x叫做以a為底N的對數,記作。其中,a叫做對數的底數,N叫做真數

自然對數是以常數e為底數的對數,記作lnN(N>0)

26.?log(x[, base])

只傳入x,返回x的自然對數(底為e)

傳入x和base,返回以base為底x的對數。計算為log(x) / log(base)

27.?log1p(x)

返回1+x的自然對數(底為e)。對于接近零的x計算結果更精確

28.?log2(x)

返回以2為底x的對數。這通常比log(x, 2)更準確

29.?log10(x)

返回以10為底x的對數。這通常比log(x, 10)更準確


示例:

運行結果:

20.085536923187668

1.0000050000069649e-05

1.0000050000166667e-05

1.0986122886681098

3.0

3.0

3.0

30.?degrees(x)

將角度x從弧度轉換為度數

# pi弧度等于180度,也就是1弧度等于57.2957795度

31.?radians(x)

將角度x從度數轉換為弧度

32.?sin(x)

返回弧度x的正弦值

# 獲取指定角度的正弦需要先使用radians()將其轉換為弧度

33.?cos(x)

返回弧度x的余弦值

34.?tan(x)

返回弧度x的正切值

35.?asin(x)

返回弧度x的反正弦值。結果范圍在-pi/2到pi/2之間

36.?acos(x)

返回弧度x的反余弦值。結果范圍在0到pi之間

37.?atan(x)

返回弧度x的反正切值。結果范圍在-pi/2到pi/2之間

38.?atan2(y, x)

以弧度為單位返回atan(y / x)。結果范圍在-pi到pi之間。從原點到點(x, y)的平面矢量使該角度與正X軸成正比。atan2()兩個輸入點的符號都是已知的,因此它可以計算角度的正確象限


示例:

運行結果:

180.0

0.5235987755982988 0.7853981633974483

0.49999999999999994 0.7071067811865476

0.8660254037844387 0.7071067811865476

0.5773502691896257 0.9999999999999999

39.?dist(p, q)

返回p與q兩點之間的歐幾里得距離,參數p, q以一個坐標序列(或可迭代對象)的形式給出。兩個點必須具有相同的維度

大致相當于:

sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))

40.?hypot(*coordinates)

返回歐幾里得范數,sqrt(sum(x**2) for x in coordinates))。這是從原點到坐標給定點的向量長度

對于一個二維點(x, y),這等價于使用畢達哥拉斯定義sqrt(x*x + y*y)計算一個直角三角形的斜邊

41.?sinh(x), cosh(x), tanh(x)

分別是返回x的雙曲正弦、余弦、正切值

42.?asinh(x), acosh(x), atanh(x)

分別是返回x的反雙曲正弦、余弦、正切值

43.?erf(x)

返回x處的誤差函數

erf()函數可用于計算傳統(tǒng)的統(tǒng)計函數,如積累標準正態(tài)分布

44.?erfc(x)

返回x處的互補誤差函數

互補誤差函數定義為1.0 - erf(x)。它用于x的大值,從其中減去一個會導致有效位數損失

45.?gamma(x)

返回x處的伽馬函數(Gamma函數)值

46.?lgamma(x)

返回Gamma函數在x絕對值的自然對數

(3)、常量

1.?pi

數學常量π=3.141592...,精確到可用精度

2.?e

數學常量e=2.718281...,精確到可用精度

3.?tau

數學常量τ=6.283185...,精確到可用精度。Tau是一個圓周常數,等于2π,圓的周長與半徑之比

4.?inf

浮點正無窮大。相當于float('inf')的輸出

# 負無窮大使用-math.inf

5.?nan

浮點“非數字”(NaN)值。相當于float('nan')的輸出

# 由于IEEE-754標準的要求,math.nan和float('nan')不被認為等于其他數字值,包括它們自己。要檢查一個數字是否等于NaN,請使用isnan()函數而不是is或==

Python模塊random, math的評論 (共 條)

分享到微博請遵守國家法律
黄冈市| 沂南县| 松滋市| 南靖县| 衢州市| 中山市| 商城县| 武陟县| 长泰县| 贵阳市| 贵溪市| 都匀市| 阳山县| 柘城县| 西贡区| 雷山县| 双峰县| 长泰县| 名山县| 桃源县| 卢湾区| 苏州市| 仙居县| 惠安县| 泰安市| 台中市| 恩施市| 河北省| 封开县| 海淀区| 新野县| 拜城县| 平江县| 醴陵市| 玉龙| 清新县| 通城县| 安多县| 会理县| 浦东新区| 阿合奇县|