随机投球入孔模拟:空孔相对频率计算难题
100球投100孔模拟实验实现方案
核心实现思路
直接用蒙特卡洛模拟完成:每次实验随机生成100个球的落孔位置,统计空孔数量;重复1000次后,计算各空孔数对应的相对频率。不需要复杂的组合函数,用随机模拟直接复现实验过程更直观可靠。
Python代码实现
import numpy as np from collections import defaultdict # 实验参数配置 total_balls = 100 total_holes = 100 trial_times = 1000 # 初始化空孔数统计容器 empty_hole_counter = defaultdict(int) for _ in range(trial_times): # 随机生成每个球的落孔编号(0-99对应100个孔) ball_positions = np.random.randint(0, total_holes, size=total_balls) # 统计有球的孔数量 filled_hole_num = len(np.unique(ball_positions)) # 计算当前实验的空孔数量 empty_hole_num = total_holes - filled_hole_num # 记录该空孔数出现的次数 empty_hole_counter[empty_hole_num] += 1 # 计算各空孔数的相对频率 relative_freq = {k: v / trial_times for k, v in sorted(empty_hole_counter.items())} # 输出结果 for empty_num, freq in relative_freq.items(): print(f"空孔数 {empty_num}: 相对频率 {freq:.4f}")
代码说明
- 用
numpy.random.randint快速生成100个球的落孔位置,模拟随机投球的过程 np.unique用于统计有球的孔的数量,总孔数减去该值即为当前实验的空孔数- 用
defaultdict记录每个空孔数出现的次数,最后除以总实验次数得到相对频率 - 对结果排序后输出,方便查看1到99各空孔数对应的频率
内容的提问来源于stack exchange,提问作者Econfinanceguy
相关产品推荐
相关产品推荐

