如何用python对不同范围的数据实现可配置权重比例的随机数产生器?

您所在的位置:网站首页 python随机数去重 如何用python对不同范围的数据实现可配置权重比例的随机数产生器?

如何用python对不同范围的数据实现可配置权重比例的随机数产生器?

2023-03-23 12:56| 来源: 网络整理| 查看: 265

在 Python 中,可以使用 random 模块中的 random 函数和 choices 函数来实现可配置权重比例的随机数产生器。

例如,对于您给出的示例,可以这样实现:

import random import matplotlib.pyplot as plt def weighted_random(ranges, weights): """ 可配置权重比例的随机数产生器 :param ranges: 随机数范围列表 :param weights: 权重列表 :return: 随机数 """ # 根据权重选择随机数范围 range = random.choices(ranges, weights=weights)[0] # 在选定的范围内生成随机数 return random.uniform(*range) # 示例代码 ranges = [(0, 10), (10, 100)] weights = [0.2, 0.8] # 生成大量随机数 random_numbers = [weighted_random(ranges, weights) for _ in range(10000)] # 绘制直方图 plt.hist(random_numbers, bins=20) plt.show()

这个示例中,我们定义了一个 `weighted_random` 函数,它接受两个参数:`ranges` 表示随机数范围列表,`weights` 表示权重列表。函数首先使用 `random.choices` 函数根据权重选择一个随机数范围。然后在选定的范围内使用 `random.uniform` 函数生成一个随机数。最后,我们调用 `weighted_random` 函数并传入随机数范围列表和权重列表作为参数,即可得到一个符合指定权重比例的随机数。然后,我们使用列表推导式生成大量随机数。最后,使用 `matplotlib.pyplot.hist` 函数绘制直方图。

运行上述代码将输出一个直方图,其中可以看到在范围 `(10, 100)` 内的随机数数量明显多于范围 `(0, 10)` 内的随机数数量,这符合我们预期的权重比例。

运行结果



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3