我想在python中进行随机beta,就像两个极值之间的正常值一样(例如:800/1000)。我使用numpy random.beta这个代码。我的问题是,我没有标准化的最小值和最大值,我希望保持价值的形状。
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import numpy as np
import math
from random import gauss
#####################################
# Parameters definition
n=100.
#deviation de 20 %
n_min = n - n*0.2
n_max = n + n*0.2
var_n_min = 100000.
var_n_max = 0.
m=100000
for i in range (0,m):
alea_var_n.append(np.random.beta(50,70))
alea_var_tau.append(np.random.beta(50,70))
if var_n_min > alea_var_n[i] :
var_n_min = alea_var_n[i]
if var_n_max < alea_var_n[i] :
var_n_max = alea_var_n[i]
for i in range (0,m):
# Normalize
alea_var_n[i] = n_min + alea_var_n[i] * (n_max- n_min)/(var_n_max + var_n_min)
答案 0 :(得分:1)
numpy
's random.beta
会给出0到1之间的值,因此要在x
和y
之间应用相同的分配,您只需执行以下操作:
z = x + (np.random.beta(a, b) * (y - x))