【发布时间】:2020-12-11 07:18:10
【问题描述】:
我一般是编程新手,但是我非常努力地让一个项目随机选择一些结果,具体取决于我生成的彩票发生该结果的概率,我想使用循环来获得随机每次的数字。
这是我的代码:
import numpy as np
p = np.arange(0.01, 1, 0.001, dtype = float)
alpha = 0.5
alpha = float(alpha)
alpha = np.zeros((1, len(p))) + alpha
def w(alpha, p):
return np.exp(-(-np.log(p))**alpha)
w = w(alpha, p)
def P(w):
return np.exp(np.log2(w))
prob_win = P(w)
prob_lose = 1 - prob_win
E = 10
E = float(E)
E = np.zeros((1, len(p))) + E
b = 0
b = float(b)
b = np.zeros((1, len(p))) + b
def A(E, b, prob_win):
return (E - b * (1 - prob_win)) / prob_win
a = A(E, b, prob_win)
a = a.squeeze()
prob_array = (prob_win, prob_lose)
prob_matrix = np.vstack(prob_array).T.squeeze()
outcomes_array = (a, b)
outcomes_matrix = np.vstack(outcomes_array).T
outcome_pairs = np.vsplit(outcomes_matrix, len(p))
outcome_pairs = np.array(outcome_pairs).astype(np.float)
prob_pairs = np.vsplit(prob_matrix, len(p))
prob_pairs = np.array(prob_pairs)
nominalized_prob_pairs = [outcome_pairs / np.sum(outcome_pairs) for
outcome_pairs in np.vsplit(prob_pairs, len(p)) ]
代码工作正常,但我想对下一行代码使用循环或类似的东西,因为我想为每一行/每对概率获得 5 个实现。当我使用size = 5 时,我只是得到一个很长的列表,但我不知道哪些值仍然属于size = 1 时的对
realisations = np.concatenate([np.random.choice(outcome_pairs[i].ravel(),
size=1 , p=nominalized_prob_pairs[i].ravel()) for i in range(len(outcome_pairs))])
或者如果我使用size=5 如下所示,我如何将实现与初始概率相匹配?我是否需要在每第 5 个元素之后切割数组,然后将值存储在一个有 5 列的矩阵中,并且为初始数组的每个第 5 个元素存储一个新行?如果是,我该怎么做?
realisations = np.concatenate([np.random.choice(outcome_pairs[i].ravel(),
size=1 , p=nominalized_prob_pairs[i].ravel()) for i in range(len(outcome_pairs))])
【问题讨论】:
标签: python matrix random probability reshape