随机数练习

简介: 随机数练习

题目描述

构造一个大小为 100(共 100 个数)的随机 0、1 序列,也就是一个只含 0、1 的数组,要求 0 出现的概率为 1/3,1 出现的概率为 2/3,然后将该序列绘制出来,并打印出该序列中 0 的个数与 1 的个数。

image.png

代码

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()

结果

image.png

核心思路


image.png

相关文章
|
6月前
|
设计模式 算法 程序员
伪随机数为什么叫伪随机数
伪随机数为什么叫伪随机数
71 1
|
7月前
|
算法 编译器 C语言
生成随机数
C语言中的`rand()`函数生成0-RAND_MAX间的伪随机数,需包含`stdlib.h`。序列重复因默认种子为1,可使用`srand(unsigned int seed)`初始化,通常结合`time(NULL)`设置种子以产生不同序列。`time()`函数从1970年至今的秒数(时间戳),包含于`time.h`,用于提供变化的种子。通过`rand() % b + a`可调整生成指定范围[a, b]内的随机数。
148 3
|
C++
如何在C++中生成随机数
在C++中,生成随机数是一个常见的技术需求。本文将介绍如何在C++中使用标准库来生成随机数。
224 0
随机数,函数
1.随机一个1-10之间的小数
84 0
Random生成伪随机数
Random生成伪随机数
84 0