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()
.
的计算错误
有没有一种方法可以使用 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()
.