我有一个随机值x_1,x_2,... x_n的列表和一个期望值X。我想写一个函数,它取这两个值,并随机生成集合{1,2...n}上定义的许多离散概率分布中的一个,满足上面提到的约束。
将问题改写为生成一个长度为n的向量p,使得
0〈= p_i〈=1
| 有害物|= 1个
p.x = X
使用我找到的here信息,我破解了下面的解决方案,但它不起作用,因为概率不是b/w 0和1
def normal_random_distribution(data_array, data_len, X_array, expd_vl):
e_mat = np.concatenate(([X_array], [np.ones(data_len)]), axis = 0)
f_mat = np.array([expd_vl, 1])
v_vec = np.linalg.lstsq(e_mat, f_mat,rcond=None)[0]
e_null = sla.null_space(e_mat)
lamda_lower = np.linalg.pinv(e_null) @ (-1 * v_vec)
lamda_upper = np.linalg.pinv(e_null) @ ( 1 - v_vec)
lamda = lamda_lower + random.random()*(lamda_upper - lamda_lower)
sol = v_vec + e_null @ lamda
return sol
如何生成p?sol有l1范数1,且|溶胶 * x| = X。我希望插值B/w lamda_lower和lamda_upper会使它b/w 0和1,但它没有。我想写函数,使它在每次调用时随机生成许多可能的解之一。我意识到一个明显的解是找到x_i〈X和x_j〉X,并插值b/w 2,但我希望函数(理论上)能够生成所有可能的分布。
1条答案
按热度按时间0md85ypi1#
在尝试创建一个递归解决方案几个小时后,我放弃了,自己编写了一个迭代的蛮力方法。