gpt4 book ai didi

python - 从python列表中选择两个数字,其概率随着它们之间的相对距离而衰减

转载 作者:行者123 更新时间:2023-12-01 08:27:11 25 4
gpt4 key购买 nike

我正在尝试获取一个列表,并从中随机选择一个数字i。接下来,我想选择第二个元素j。选择j的概率随着1/|i-j|衰减。例如,它选择距离我的初始i四步的j的相对概率是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)

Python 中是否有一个内置函数,我可以将这些权重输入其中,以选择具有此概率分布的 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 运行上面的代码会出现错误。我什至不确定这是否是我想要的。有其他方法可以做到这一点吗?

最佳答案

有一个内置函数可以实现此目的: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.

关于python - 从python列表中选择两个数字,其概率随着它们之间的相对距离而衰减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54166840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com