python - 如何使用 np.random.zipf 对于给定的值范围生成随机变量?

标签 python random

我有一个给定的价格范围,并且我使用随机制服来从中获得随机生成的随机结果。我如何引入 np.random.zipf 来执行相同的操作?

我尝试了以下方法:

a = np.random.zipf((randint(1, 6000000)), size=None)
print(a)

但它似乎没有提供返回值,并且它继续运行代码而没有任何终止

order_total_price_range1 = round(random.uniform(850, 560000), 5)
order_total_price_range2 = round(random.uniform(850, 560000), 5)

我希望从 zipf 分布中获取最大值和最小值,但目前没有返回任何结果。

最佳答案

虽然 @RobinNicole 是正确的 Zipf 分布,但您可以使用离散采样来模拟截断的 Zipf。沿着这条线

import numpy as np
from matplotlib import pyplot as plt

def Zipf(a: np.float64, min: np.uint64, max: np.uint64, size=None):
    """
    Generate Zipf-like random variables,
    but in inclusive [min...max] interval
    """
    if min == 0:
        raise ZeroDivisionError("")

    v = np.arange(min, max+1) # values to sample
    p = 1.0 / np.power(v, a)  # probabilities
    p /= np.sum(p)            # normalized

    return np.random.choice(v, size=size, replace=True, p=p)

min = np.uint64(3)
max = np.uint64(8)

q = Zipf(1.2, min, max, 10000)
print(q)

h, bins = np.histogram(q, bins = int(max-min+1),range=(min-0.5,max+0.5))
print(h)
print(bins)

plt.hist(q, bins = bins)
plt.title("Zipf")
plt.show()

将制作这样的图表

enter image description here

关于python - 如何使用 np.random.zipf 对于给定的值范围生成随机变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57413721/

相关文章:

python - 保存数据的有效方法

python - 从 Python 中的 block 中停止生成器

python - 处理字典两点之间的距离

python - 如何在 NumPy 中声明和填充数组?

python - 将 libgfortran 与 NumPy 捆绑在一起

android - 获取范围之间的随机数,不重复

java - 从数组中获取随机且不重复的对象

java - Repaint() 方法不会重新绘制需要的内容

sql - 使用 RND() 的数据类型不匹配

c# - 如何在随机位置绘制单个 Sprite 10 次?