题目描述
构造一个大小为 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()
结果