用「設計圖、倉庫、紙條」的比喻,看七行 Python 程式碼如何在記憶體中模擬擲骰子、計算事件 A 與 B 同時發生的聯合機率。
程式來源:114 年第二次 AI 應用規劃師-中級-第三科:機器學習技術與應用,第 41 題。
1import numpy as np2np.random.seed(123)3n = 1000004dice_rolls = np.random.randint(1, 7, size=n)5A = (dice_rolls % 2 == 0)6B = (dice_rolls > 3)7A_and_B = A & B
歡迎!這個動畫會把七行 Python 程式碼在記憶體裡發生的事情,一步一步用「倉庫」和「紙條」的比喻畫出來。
點上方 下一步 → 開始觀看。
這頁拆解 114 年第二次中級科目三第 41 題:用 np.random.seed、np.random.randint 擲十萬次骰子,再用布林遮罩算 A、B 同時發生的聯合機率。中級科目二常考機率:獨立事件 P(A∩B)=P(A)P(B)、大數法則(次數越多越接近理論值)。常見考法:seed 讓結果可重現;randint(1, 7) 的上界不含 7;(a==6) & (b==6) 是逐元素布林運算,.mean() 就是事件發生比例。易混點:陣列要用 & 不能用 and;兩顆骰子獨立時聯合機率 1/36。情境題長相:「模擬結果 0.0279 最接近哪個理論值?」答 1/36≈0.0278。
想練情境題與詳解 → AI 學習與考證地圖
固定亂數產生器的起點,讓每次執行得到同一串「假亂數」,結果可重現、方便驗證與對答案;不設 seed 每次結果都會不同。
十萬個介於 1 到 6 的整數(上界 7 不包含),相當於擲十萬次骰子,回傳一個 ndarray。
先做兩個布林陣列(如 a==6、b==6),用 & 逐元素取「且」,再 .mean():True 當 1、False 當 0,平均值就是兩事件同時發生的比例。
模擬是有限次數的頻率,會有隨機誤差;依大數法則,次數越多越接近理論值 1/36。考題常問「增加模擬次數會怎樣」:誤差變小。
P(A∩B)=P(A)×P(B)。兩顆骰子互不影響,各出 6 的機率 1/6,同時出 6 是 1/36;若事件不獨立要改用 P(A∩B)=P(A)P(B|A)。
and 只能判斷兩個單一布林值,對陣列會報錯;& 是逐元素位元運算,兩邊要加括號 (a==6) & (b==6)。