random.choice 对于二维数组,数字越大概率越高?

random.choice for 2D array, bigger numbers with higher probability?

有没有一种方法可以使用 LOOP

从二维数组的每一行中随机选取 n 项,并且选取较大值 w/o 的概率更高

random.choice() 仅适用于一维数组...

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())

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

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

您可以使用 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().

的计算错误