题目描述
构造一个大小为 100(共 100 个数)的随机 0、1 序列,也就是一个只含 0、1 的数组,要求 0 出现的概率为 1/3,1 出现的概率为 2/3,然后将该序列绘制出来,并打印出该序列中 0 的个数与 1 的个数。
代码
import numpy as np import random import matplotlib.pyplot as plt # 定义从均匀分布中获取随机数的函数 def get_uniform_random_number(low, high): """ :param low: 均匀分布的下界 :param high: 均匀分布的上界 :return: 从均匀分布中产生的随机数 """ # 均匀分布的随机数生成 number = np.random.uniform(low, high) # 返回值 return number # 定义从一个数字列表中以一定的概率取出对应区间中数字的函数 def get_number_by_pro(number_list, pro_list): """ :param number_list:数字列表 :param pro_list:数字对应的概率列表 :return:按概率从数字列表中抽取的数字 """ # 用均匀分布中的样本值来模拟概率 x = random.uniform(0, 1) # 累积概率 cum_pro = 0.0 # 将可迭代对象打包成元组列表 for number, number_pro in zip(number_list, pro_list): cum_pro += number_pro if x < cum_pro: # 返回值 return number # 主模块 if __name__ == "__main__": # 数字列表 num_list = [0, 1] # 对应的概率列表 pr_list = [1/3, 2/3] # 函数调用 # 定义存储100个随机序列的列表 result_list = [] for i in range(100): n = get_number_by_pro(number_list=num_list, pro_list=pr_list) result_list.append(n) # 打印结果 print(result_list) zero_sum = 0 one_sum = 0 for i in result_list: if i==1: one_sum += 1 else: zero_sum += 1 print("0的个数有{}".format(zero_sum)) print("1的个数有{}".format(one_sum)) x_values = list(range(0, 100)) y_values = result_list plt.scatter(x_values, y_values,color='red') plt.show()
结果
核心思路