从列表中选择蟒两个数字与衰减它们之间的相对距离的概率

问题描述 投票:1回答:1

我试图把一个列表,并从中选择一些i随机。这之后,我想选择第二元件j。选择j的概率衰变1/|i-j|。例如,从我最初j选择i四步走的相对概率是1/4,选择紧挨我j一个i的概率。

到目前为止,我一直在努力做的就是填充我的列表中,选择我的i,第一次然后计算使用|i-j|在列表中的所有其他元素的权重。

import numpy as np
import random as random
list = [1,2,3,4,5,6,7,8,9,10]
a = 1
n1 = random.choice(range(len(list)))
n1_coord = (n1, list[n1])
print(n1_coord)
prob_weights = []
for i in range(0, n1):
    wt = 1/((np.absolute(n1-i)))
    #print(wt)
    prob_weights.append(wt)
for i in range(n1+1,len(list)):
    wt = 1/((np.absolute(n1-i)))
    prob_weights.append(wt)

是否有内置的蟒蛇,我可以养活这些权重的,其会选择这个概率分布的j的功能。我可以喂到我的权重数组:

numpy.random.choice(a, size=None, replace=True, p=None)

我想我会让P = prob_weights在我的代码?

 import numpy as np
    import random as random
    list = [1,2,3,4,5,6,7,8,9,10]
    a = 1
    n1 = random.choice(range(len(list)))
    n1_coord = (n1, list[n1])
    print(n1_coord)
    prob_weights = []
    for i in range(0, n1):
        wt = 1/((np.absolute(n1-i)))
        #print(wt)
        prob_weights.append(wt)
    for i in range(n1+1,len(list)):
        wt = 1/((np.absolute(n1-i)))
        prob_weights.append(wt)
    n2 = np.random.choice(range(len(list)), p=prob_weights)
    n2_coord = (n2, list[n2])

与上述np.random.choice运行这个给我一个错误。我甚至不知道这是做什么的,我希望它在第一时间做的。是否有另一种方式做到这一点?

python numpy random probability
1个回答
1
投票

有一个内置的功能是:random.choices,它接受一个weights说法。

鉴于你的第一选择指数n1,你可以这样做

indices = range(len(mylist))
weights = [0 if i == n1 else 1 / abs(i - n1) for i in indices]
n2 = random.choices(indices, weights=prb_wts, k=1).

通过第一项的权重设置为零,可以防止它被选中。

数值运算确实会更快使用numpy的时候,所以你可以使用np.random.choice,它接受一个p参数:

values = np.array([...])
indices = np.arange(values.size)

n1 = np.random.choice(indices)
i = values[n1]

delta = np.abs(indices - n1)
weights = np.divide(1.0, delta, where=delta)
n2 = np.random.choice(indices, p=weights)
j = values[n2]

作为未成年人挑剔,不叫可变list,因为这隐藏了内置,并且import x as x只是import x

© www.soinside.com 2019 - 2024. All rights reserved.