![](/img/trans.png)
[英]How to generate random numbers in specyfic range using pareto distribution in Python
[英]Generate random numbers in a specific range using beta distribution
我想使用 a=2.2 和 b=1 的 beta 分布在 (0.0001,0.03) 范围内生成 100 万和 1000 万个数据点。 提前致谢!
我试过这个:
from scipy.stats import beta
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1)
a, b = 2.2, 1
#Generated pdf of required range
x = np.linspace(0.0001, 0.03, 100)
ax.plot(x, beta.pdf(x, a, b),
'k-', lw=5, alpha=0.6, label='beta pdf')
r = beta.rvs(a, b, size=1000) #Generating values
print(r)
“r”中的值不在范围 (0.0001,0.03) 内。
对于您使用的 alpha 和 beta 参数,beta 分布是一条从(0, 0)
到(1, 2.2)
的直线。 您感兴趣的范围(0.0001, 0.03)
既是 0 到 1 范围的一小部分,但对于您选择的参数来说也有很小的概率。
要实际生成 100 万或 1000 万个点,您将需要不断生成点并将它们累加到一个数组中。
from scipy.stats import beta
import numpy as np
b_dist = beta(a=2.2, b=1)
target_length = 1_000_000
points = np.array([])
while points.size < target_length:
# generate new points
x = b_dist.rvs(1_000_000)
# find the indices that match criteria
ix = x < 0.03
ix = ix & (0.0001 < x)
points = np.hstack([points, x[ix]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.