如何解决随机选择,概率放置
我有两个长度相等的列表,X
和 Y
。我有第三个列表,locations
。 X
和 Y
中的值与列表 locations
的索引相关。我还有一个等式,如下所示。
def equat(x):
return np.power(x,-0.0005165876209672664) - 0.9960910063226581
以下是我的问题的主要 for 循环。
for i,j in zip(X[:10],Y[:10]):
A = np.random.choice(X,replace = False) # randomly select neuron from neuron A
L_a = locations.iloc[[A],] # acquire neuron A's location
L_b = locations.iloc[[j],] # acquire neuron B's location (unchanged from list)
D_ = pd.DataFrame(scipy.spatial.distance.cdist(L_a,L_b,'euclidean')) # compute its distance
首先,我有列表 X
和 Y
。 A
从列表 X
中随机选择。 L_a
然后使用值 A
来获取该值的位置。 L_b
使用 Y
中的第一个值,因为如前所述,列表 Y
必须始终保持不变。 D_
然后将计算 L_a
和 L_b
之间的距离。
现在,这就是我卡住的地方。我想要做的是,首先确保两个点不相同,如果相同,则返回A
并从列表中随机选择另一个值。其次,我想根据使用 A
生成的概率添加被选择添加到列表中的 C
值,例如 equat
。如果此匹配没有发生,那么我希望循环返回到 A
并随机选择另一个值,直到选择该值并将其添加到 C
。
任何关于如何解决这个问题的建议都会很受欢迎!
解决方法
首先,您不需要 zip(X[:10],Y[:10])
,因为您从未使用过 i
。您可以只使用 for j in Y[:10]
。
第二,对于你的第一个问题 (A != j),你可以很容易地用这个替换 A
赋值行:
A = j
while A==j :
A = np.random.choice(X,replace = False) # randomly select neuron from neuron A
你也可以这样做(如果 X
是一个 numpy 数组):
A = np.random.choice(X[X!=j],replace = False) # randomly select neuron from neuron A
对于您的最后一个问题,您可以使用此结构获得具有 equat
分布的随机布尔值:
your_p = equat(A)
should_I_put_A_in_C = numpy.random.choice([True,False],p=[your_p,1-your_p])
然后用它来决定你想要做什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。