a visual walk-through · 機率 × 記憶體

擲十萬次骰子,記憶體裡發生了什麼?
NumPy probability simulation, demystified.

用「設計圖、倉庫、紙條」的比喻,看七行 Python 程式碼如何在記憶體中模擬擲骰子、計算事件 A 與 B 同時發生的聯合機率。

程式來源:114 年第二次 AI 應用規劃師-中級-第三科:機器學習技術與應用,第 41 題。

程式碼
.py
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
STEP 00
準備開始

歡迎!這個動畫會把七行 Python 程式碼在記憶體裡發生的事情,一步一步用「倉庫」和「紙條」的比喻畫出來。

點上方 下一步 → 開始觀看。

電腦記憶體(一座大倉庫)
VARIABLES — 牆上的紙條 HEAP — 倉庫裡的實例 Class numpy 📦 (設計藍圖) MODULE — <module 'numpy'> @ 0x7F2A·C3D4·0000 .array(...) .zeros(...) .mean(...) .sum(...) ⋯ 還有上百個工具 SUBMODULE — np.random .seed(...) .randint(...) .rand(...) ✓ seed=123 123 Class int 數值物件藍圖 OBJECT — int instance @ 0x7F2A·C3D5·0050 value = 屬性 / 方法 .bit_length() .real / .to_bytes(...) immutable int 物件 100000 100000 (1, 7) 100000 1, 7, size=100000 參數組合後送進 randint .randint() NDARRAY 實例 — dice_rolls @ 0x7F2A·C3D5·0100 3 6 2 5 1 4 6 2 ⋯ 共 100,000 格 shape: (100000,) dtype: int64 size : 100000 含義 : 模擬 10 萬次擲骰子(1~6 點) NDARRAY 實例 — A (bool, 偶數) @ 0x7F2A·C3D5·0240 F T T F F T T T ⋯ 100,000 個 T/F shape: (100000,) dtype: bool 事件 A : 骰子點數為偶數 (% 2 == 0) P(A) ≈ 0.5 NDARRAY 實例 — B (bool, > 3) @ 0x7F2A·C3D5·0380 F T F T F T T F ⋯ 100,000 個 T/F shape: (100000,) dtype: bool 事件 B : 骰子點數 > 3 (即 4, 5, 6) P(B) ≈ 0.5 NDARRAY 實例 — A_and_B (bool, A ∩ B) @ 0x7F2A·C3D5·04C0 F T F F F T T F ⋯ 100,000 個 T/F shape: (100000,) dtype: bool 事件 A ∩ B : 偶數 且 > 3,即 {4, 6} P(A ∩ B) ≈ 2/6 ≈ 0.333 np → 0x7F2A·C3D4·0000 n → 0x7F2A·C3D5·0050 dice_rolls → 0x7F2A·C3D5·0100 A → 0x7F2A·C3D5·0240 B → 0x7F2A·C3D5·0380 A_and_B → 0x7F2A·C3D5·04C0

📝 iPAS 考點提醒

這頁拆解 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 學習與考證地圖

❓ 常見問題

為什麼要先呼叫 np.random.seed?

固定亂數產生器的起點,讓每次執行得到同一串「假亂數」,結果可重現、方便驗證與對答案;不設 seed 每次結果都會不同。

randint(1, 7, size=100000) 會產生什麼?

十萬個介於 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 在 NumPy 裡差在哪?

and 只能判斷兩個單一布林值,對陣列會報錯;& 是逐元素位元運算,兩邊要加括號 (a==6) & (b==6)。

🧭 相關主題

← 返回 AI 學習與考證地圖