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

xuo3flqw  于 2023-01-05  发布在  其他
关注(0)|答案(2)|浏览(172)

有没有一种方法可以从2D数组的每一行随机选取n个项目,并且不使用LOOP就能以更高的概率选取更大的值
choice()仅适用于一维数组...
例如,如果我有:

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

k2fxgqgv1#

您可以使用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()时出错。

g52tjvyc

g52tjvyc2#

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

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

相关问题