随机数练习

144 阅读1分钟

题目描述

构造一个大小为 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()

结果


核心思路