導航:首頁 > 編程語言 > 模擬拋n次硬幣python

模擬拋n次硬幣python

發布時間:2024-08-05 17:52:08

1. 統計學入門級:常見概率分布+python繪制分布圖

如果隨機變數X的所有取值都可以逐個列舉出來,則稱X為離散型隨機變數。相應的概率分布有二項分布,泊松分布。

如果隨機變數X的所有取值無法逐個列舉出來,而是取數軸上某一區間內的任一點,則稱X為連續型隨機變數。相應的概率分布有正態分布,均勻分布,指數分布,伽馬分布,偏態分布,卡方分布,beta分布等。(真多分布,好恐怖~~)

在離散型隨機變數X的一切可能值中,各可能值與其對應概率的乘積之和稱為該隨機變數X的期望值,記作E(X) 。比如有隨機變數,取值依次為:2,2,2,4,5。求其平均值:(2+2+2+4+5)/5 = 3。

期望值也就是該隨機變數總體的均值。 推導過程如下:
= (2+2+2+4+5)/5
= 1/5 2 3 + 4/5 + 5/5
= 3/5 2 + 1/5 4 + 1/5 5
= 0.6
2 + 0.2 4 + 0.2 5
= 60% 2 + 20% 4 + 20%*5
= 1.2 + 0.8 + 1
= 3

倒數第三步可以解釋為值為2的數字出現的概率為60%,4的概率為20%,5的概率為20%。 所以E(X) = 60% 2 + 20% 4 + 20%*5 = μ = 3。

0-1分布(兩點分布),它的隨機變數的取值為1或0。即離散型隨機變數X的概率分布為:P{X=0} = 1-p, P{X=1} = p,即:

則稱隨機變數X服從參數為p的0-1分布,記作X~B(1,p)。

在生活中有很多例子服從兩點分布,比如投資是否中標,新生嬰兒是男孩還是女孩,檢查產品是否合格等等。

大家非常熟悉的拋硬幣試驗對應的分布就是二項分布。拋硬幣試驗要麼出現正面,要麼就是反面,只包含這兩個結果。出現正面的次數是一個隨機變數,這種隨機變數所服從的概率分布通常稱為 二項分布 。

像拋硬幣這類試驗所具有的共同性質總結如下:(以拋硬幣為例)

通常稱具有上述特徵的n次重復獨立試驗為n重伯努利試驗。簡稱伯努利試驗或伯努利試驗概型。特別地,當試驗次數為1時,二項分布服從0-1分布(兩點分布)。

舉個栗子:拋3次均勻的硬幣,求結果出現有2個正面的概率
已知p = 0.5 (出現正面的概率) ,n = 3 ,k = 2

所以拋3次均勻的硬幣,求結果出現有2個正面的概率為3/8。

二項分布的期望值和方差 分別為:

泊松分布是用來描述在一 指定時間范圍內或在指定的面積或體積之內某一事件出現的次數的分布 。生活中服從泊松分布的例子比如有每天房產中介接待的客戶數,某微博每月出現伺服器癱瘓的次數等等。 泊松分布的公式為

其中 λ 為給定的時間間隔內事件的平均數,λ = np。e為一個數學常數,一個無限不循環小數,其值約為2.71828。

泊松分布的期望值和方差 分別為:

使用Python繪制泊松分布的概率分布圖:

因為連續型隨機變數可以取某一區間或整個實數軸上的任意一個值,所以通常用一個函數f(x)來表示連續型隨機變數,而f(x)就稱為 概率密度函數 。

概率密度函數f(x)具有如下性質 :

需要注意的是,f(x)不是一個概率,即f(x) ≠ P(X = x) 。在連續分布的情況下,隨機變數X在a與b之間的概率可以寫成:

正態分布(或高斯分布)是連續型隨機變數的最重要也是最常見的分布,比如學生的考試成績就呈現出正態分布的特徵,大部分成績集中在某個范圍(比如60-80分),很小一部分往兩端傾斜(比如50分以下和90多分以上)。還有人的身高等等。

正態分布的定義 :

如果隨機變數X的概率密度為( -∞<x<+∞):

則稱X服從正態分布,記作X~N(μ,σ²)。其中-∞<μ<+∞,σ>0, μ為隨機變數X的均值,σ為隨機變數X的標准差。 正態分布的分布函數

正態分布的圖形特點 :

使用Python繪制正態分布的概率分布圖:

正態分布有一個3σ准則,即數值分布在(μ-σ,μ+σ)中的概率為0.6827,分布在(μ-2σ,μ+2σ)中的概率為0.9545,分布在(μ-3σ,μ+3σ)中的概率為0.9973,也就是說大部分數值是分布在(μ-3σ,μ+3σ)區間內,超出這個范圍的可能性很小很小,僅占不到0.3%,屬於極個別的小概率事件,所以3σ准則可以用來檢測異常值。

當μ=0,σ=1時,有

此時的正態分布N(0,1) 稱為標准正態分布。因為μ,σ都是確定的取值,所以其對應的概率密度曲線是一條 形態固定 的曲線。

對標准正態分布,通常用φ(x)表示概率密度函數,用Φ(x)表示分布函數:

假設有一次物理考試特別難,滿分100分,全班只有大概20個人及格。與此同時語文考試很簡單,全班絕大部分都考了90分以上。小明的物理和語文分別考了60分和80分,他回家後告訴家長,這時家長能僅僅從兩科科目的分值直接判斷出這次小明的語文成績要比物理好很多嗎?如果不能,應該如何判斷呢?此時Z-score就派上用場了。 Z-Score的計算定義

即 將隨機變數X先減去總體樣本均值,再除以總體樣本標准差就得到標准分數啦。如果X低於平均值,則Z為負數,反之為正數 。通過計算標准分數,可以將任何一個一般的正態分布轉化為標准正態分布。

小明家長從老師那得知物理的全班平均成績為40分,標准差為10,而語文的平均成績為92分,標准差為4。分別計算兩科成績的標准分數:
物理:標准分數 = (60-40)/10 = 2
語文:標准分數 = (85-95)/4 = -2.5

從計算結果來看,說明這次考試小明的物理成績在全部同學中算是考得很不錯的,而語文考得很差。

指數分布可能容易和前面的泊松分布混淆,泊松分布強調的是某段時間內隨機事件發生的次數的概率分布,而指數分布說的是 隨機事件發生的時間間隔 的概率分布。比如一班地鐵進站的間隔時間。如果隨機變數X的概率密度為:

則稱X服從指數分布,其中的參數λ>0。 對應的分布函數 為:

均勻分布的期望值和方差 分別為:

使用Python繪制指數分布的概率分布圖:

均勻分布有兩種,分為 離散型均勻分布和連續型均勻分布 。其中離散型均勻分布最常見的例子就是拋擲骰子啦。拋擲骰子出現的點數就是一個離散型隨機變數,點數可能有1,2,3,4,5,6。每個數出現的概率都是1/6。

設連續型隨機變數X具有概率密度函數:

則稱X服從區間(a,b)上的均勻分布。X在等長度的子區間內取值的概率相同。對應的分布函數為:

f(x)和F(x)的圖形分別如下圖所示:

均勻分布的期望值和方差 分別為:

2. 用python做一個程序:扔100次硬幣,然後分別顯示出擲出正面和反面的次數

7行代碼即可寫出程序,詳細步驟:

1、首先打開python自帶的IDLE,打開IDLE並ctrl+n新建如圖界面。

3. Python之動態規劃演算法

動態規劃演算法中是將復雜問題遞歸分解為子問題,通過解決這些子問題來解決復雜問題。與遞歸演算法相比,動態編程減少了堆棧的使用,避免了重復的計算,效率得到顯著提升。

先來看一個簡單的例子,斐波那契數列.

斐波那契數列的定義如下。

斐波那契數列可以很容易地用遞歸演算法實現:

上述代碼,隨著n的增加,計算量呈指數級增長,演算法的時間復雜度是 。

採用動態規劃演算法,通過自下而上的計算數列的值,可以使演算法復雜度減小到 ,代碼如下。

下面我們再看一個復雜一些的例子。

這是小學奧數常見的硬幣問題: 已知有1分,2分,5分三種硬幣數量不限,用這些硬幣湊成為n分錢,那麼一共有多少種組合方法。

我們將硬幣的種類用列表 coins 定義;
將問題定義為一個二維數組 dp,dp[amt][j] 是使用 coins 中前 j+1 種硬幣( coins[0:j+1] )湊成總價amt的組合數。

例如: coins = [1,2,5]

dp[5][1] 就是使用前兩種硬幣 [1,2] 湊成總和為5的組合數。

對於所有的 dp[0][j] 來說,湊成總價為0的情況只有一種,就是所有的硬幣數量都為0。所以對於在有效范圍內任意的j,都有 dp[0][j] 為1。

對於 dp[amt][j] 的計算,也就是使用 coins[0:j+1] 硬幣總價amt的組合數,包含兩種情況計算:

1.當使用第j個硬幣時,有 dp[amt-coins[j]][j] 種情況,即amt減去第j個硬幣幣值,使用前j+1種硬幣的組合數;

2.當不使用第j個硬幣時,有 dp[amt][j-1] 種情況,即使用前j種硬幣湊成amt的組合數;

所以: dp[amt][j] = dp[amt - coins[j]][j]+dp[amt][j-1]

我們最終得到的結果是:dp[amount][-1]

上述分析省略了一些邊界情況。

有了上述的分析,代碼實現就比較簡單了。

動態規劃演算法代碼簡潔,執行效率高。但是與遞歸演算法相比,需要仔細考慮如何分解問題,動態規劃代碼與遞歸調用相比,較難理解。

我把遞歸演算法實現的代碼也附在下面。有興趣的朋友可以比較一下兩種演算法的時間復雜度有多大差別。

上述代碼在Python 3.7運行通過。

4. 如何在Python中實現這五類強大的概率分布

R編程語言已經成為統計分析中的事實標准。但在這篇文章中,我將告訴你在Python中實現統計學概念會是如此容易。我要使用Python實現一些離散和連續的概率分布。雖然我不會討論這些分布的數學細節,但我會以鏈接的方式給你一些學習這些統計學概念的好資料。在討論這些概率分布之前,我想簡單說說什麼是隨機變數(random variable)。隨機變數是對一次試驗結果的量化。

舉個例子,一個表示拋硬幣結果的隨機變數可以表示成

Python

1

2

X = {1 如果正面朝上,

2 如果反面朝上}

隨機變數是一個變數,它取值於一組可能的值(離散或連續的),並服從某種隨機性。隨機變數的每個可能取值的都與一個概率相關聯。隨機變數的所有可能取值和與之相關聯的概率就被稱為概率分布(probability distributrion)。

我鼓勵大家仔細研究一下scipy.stats模塊。

概率分布有兩種類型:離散(discrete)概率分布和連續(continuous)概率分布。

離散概率分布也稱為概率質量函數(probability mass function)。離散概率分布的例子有伯努利分布(Bernoulli distribution)、二項分布(binomial distribution)、泊松分布(Poisson distribution)和幾何分布(geometric distribution)等。

連續概率分布也稱為概率密度函數(probability density function),它們是具有連續取值(例如一條實線上的值)的函數。正態分布(normal distribution)、指數分布(exponential distribution)和β分布(beta distribution)等都屬於連續概率分布。

若想了解更多關於離散和連續隨機變數的知識,你可以觀看可汗學院關於概率分布的視頻。

二項分布(Binomial Distribution)

服從二項分布的隨機變數X表示在n個獨立的是/非試驗中成功的次數,其中每次試驗的成功概率為p。

E(X) =np, Var(X) =np(1−p)

如果你想知道每個函數的原理,你可以在IPython筆記本中使用help file命令。E(X)表示分布的期望或平均值。

鍵入stats.binom?了解二項分布函數binom的更多信息。

二項分布的例子:拋擲10次硬幣,恰好兩次正面朝上的概率是多少?

假設在該試驗中正面朝上的概率為0.3,這意味著平均來說,我們可以期待有3次是硬幣正面朝上的。我定義擲硬幣的所有可能結果為k = np.arange(0,11):你可能觀測到0次正面朝上、1次正面朝上,一直到10次正面朝上。我使用stats.binom.pmf計算每次觀測的概率質量函數。它返回一個含有11個元素的列表(list),這些元素表示與每個觀測相關聯的概率值。

結語(Conclusion)

概率分布就像蓋房子的藍圖,而隨機變數是對試驗事件的總結。我建議你去看看哈佛大學數據科學課程的講座,Joe Blitzstein教授給了一份摘要,包含了你所需要了解的關於統計模型和分布的全部。

5. python n個硬幣中找一個假幣,且已知假幣較輕,怎麼用遞歸和非遞歸兩種方法求

思路:假設有數組arr,裡面的int值代表銀幣重量,下標代表第幾個銀幣。

循環(非遞歸):把數組第一個值賦值給變數tmp,從第二個變數循環到最後一個,比較循環里的變數和tmp值,如果不等,就返回小數下標。

遞歸:用二分思想,銀幣分2堆(不能均分時把中間那個留出來),取重量小的那堆繼續二分。最後只剩下一個時就是所求

下面這種寫法是返回下標的。也可以把硬幣假設成一種數據類型,然後返回那個類型

#!/usr/bin/python
#-*-coding:utf-8-*-

#返回最小值下標
defgetMin(arr1):
iflen(arr1)==0:return-1

tmp=arr1[0]
index=0
forcurinarr1:
iftmp!=cur:
return0iftmp<curelseindex
index+=1
return-1

real_index=0
#返回最小值下標遞歸
defgetMinRecursion(arr1):
globalreal_index
n=len(arr1)
ifn==0:return-1

ifn==1:returnreal_index
ifn==2:returnreal_indexifarr1[0]<arr1[1]elsereal_index+1

sum1=sum(arr1[0:int(n/3)])
sum2=sum(arr1[int(n/3):int(n/3)*2])

ifsum1==sum2:
real_index+=int(n/3)*2
returngetMinRecursion(arr1[int(n/3)*2:n+1])
ifsum1<sum2:
returngetMinRecursion(arr1[0:int(n/3)])
else:
real_index+=int(n/3)
returngetMinRecursion(arr1[int(n/3):int(n/3)*2])

arr=[1,1,1,1,1,1,0,1,1]
print("%d"%getMin(arr))
print("%d"%getMinRecursion(arr))

6. python統計拋硬幣連續出現6次相同面的概率

假設拋硬幣的結果是隨機的,並且正反兩面出現的概率相等。那麼,拋一枚硬幣連續出現6次相同面的概率為:
cssCopy codeP = (1/2)^6 = 1/64 ≈ 0.0156

即每次拋硬幣連續出現6次相同面的概率大約為0.0156。
下面是一個簡單的Python程序,可以模擬拋硬幣並計算連續出現6次相同面的概率:
pythonCopy codeimport random

n = 1000000 # 拋硬幣的次數count = 0 # 記錄連續出現6次相同面的次數for i in range(n):
result = [random.randint(0, 1) for j in range(6)] # 拋6次硬幣
if result.count(0) == 6 or result.count(1) == 6: # 判斷是否連續出現6次相同面
count += 1print("連續出現6次相同面的概率為:", count/n)

在這個程序中,我們拋了100萬次硬幣,並記錄了連續出現6次相同面的次數。最後,我們通過除以總次數來計算概率,並輸出結果。
需要注孝碰意的是,這個程序中的結果是基於隨機抽樣的統計,因此和理論值略有偏差。但是,當拋硬幣的次數足巧衡談夠大時,實驗結果會趨近於理攔汪論值。

7. 求翻譯,是編程的,python,我不要什麼谷歌翻譯

隨機漫步是如分子的布朗運動一樣的某種統計系統模型的一種特殊的模擬。你可以想像一個用拋硬幣方法完成的一維隨機漫步。假設你站在一個長直的人行道上,你的前後都無限延伸。你拋起一枚硬幣,如果它的正面朝上,你則向前走一步,如果背面朝上,你則退後一步。假設你完成了一個n步的隨機漫步。那麼從起點到你結束的位置平均有多少步遠?編寫一個程序來幫助你研究這個問題。

8. 編寫一個Python程序, 模擬拋硬幣一百萬次,顯示出現正面和反面的次數.

import random
count = 0 # 1 正面 0 反面 記錄1的次數
for i in range(10000000):
n = random.randint(0,1)
if n == 1:
count += 1
print(u'正面{0}次,反面{1}次'.format(count,1000000-count))

閱讀全文

與模擬拋n次硬幣python相關的資料

熱點內容
什麼演算法治宣傳 瀏覽:16
哪個app可以測溫槍 瀏覽:17
macmongodbphp 瀏覽:322
php寫游戲伺服器 瀏覽:871
對立陣營插旗命令 瀏覽:363
java實現帕斯卡三角形演算法 瀏覽:314
linux文件名限制 瀏覽:700
金稅三期代理伺服器地址是什麼意思 瀏覽:429
多自變數擬合Python 瀏覽:452
文件夾加密總是失敗 瀏覽:510
androiddexpathlist 瀏覽:624
要卸載己加密的文件怎麼辦 瀏覽:158
ping伺服器ip地址失敗 瀏覽:136
成都黑馬程序員 瀏覽:637
成考app哪個好 瀏覽:702
linux當前線程id 瀏覽:342
哪個app支持掃花唄 瀏覽:838
著色器編譯程序 瀏覽:583
怎樣看app所屬文件夾 瀏覽:543
如何把網頁轉化為pdf 瀏覽:719