随机选择二维数组,数字越大,概率越高?



有没有办法从 2D 数组中的每一行中随机挑选 n 个项目,使用 LOOP 选择较大的值的概率更高

random.choice(( 仅适用于 1D 数组...

F.e. 如果我有 :

q = np.random.random((10,10))

我可以像这样在每一行中选择 MAX-2:

np.sort(q,axis=1)[:,-2:]

相反,我想要的是随机选择 2 并不总是最大值,但概率越高,数字越大。

以下是您如何获得具有概率的单行:

np.random.choice(q[0,:], p=q[0,:]/q[0,:].sum())

您可以使用apply_along_axis:

q = np.random.random((10,10))
def choice(row, n, replace=False):
return np.random.choice(row, size=n, p=row/row.sum(), replace=replace)
np.apply_along_axis(func1d=choice, axis=1, arr=q, n=2)

我不知道你有什么数组,但你可能应该检查row.sum()不是 0 以避免p=row/row.sum()计算错误。

使用 random.choices 的非 numpy 解决方案如下:

res = [random.choices(l, weights=l, k=2) for l in q]

最新更新