【问题标题】:Random selection, probabilistic placement随机选择,概率放置
【发布时间】:2021-04-27 06:30:28
【问题描述】:

我有两个列表,XY,长度相等。我有第三个列表,locationsXY 中的值与locations 列表的索引相关。我还有一个方程式,如下所示。

def equat(x):
        return np.power(x, -0.0005165876209672664) - 0.9960910063226581

下面是我的问题的主循环。

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

首先,我有列表 XYA 从列表X 中随机选择。 L_a 然后使用值A 来获取该值的位置。 L_b 使用Y 中的第一个值,因为如前所述,列表Y 必须始终保持不变。然后D_ 将计算L_aL_b 之间的距离。

现在,我有点卡住了。我想做的是,首先确保两个点不相同,如果是,则返回A 并从列表中随机选择另一个值。其次,我想根据使用equat 生成的概率添加被选择添加到列表中的A 的值,比如C。如果没有发生这种匹配,那么我希望循环返回到 A 并随机选择另一个值,直到该值被选择并添加到 C

任何有关如何解决此问题的建议都会受到欢迎!

【问题讨论】:

    标签: python numpy random probability


    【解决方案1】:

    首先,您不需要zip(X[:10], Y[:10]),因为您从未使用过i。您可以使用for j in Y[:10]

    其次,对于您的第一个问题 (A != j),您可以轻松地将 A assignment 行替换为这个问题:

    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])
    

    然后用它来决定你想做什么。

    【讨论】:

    • 此外,如果您在位置上有相同的点并且您不想同时选择它们,您可以使用位置的唯一性或在while 条件下检查位置值。
    • 谢谢!超级有帮助。最重要的是:``` your_p = equat(D_) should_I_put_A_in_C = numpy.random.choice([True, False], p=[your_p, 1-your_p]) ``` 出现错误指出p必须是一维的。你能告诉我为什么会发生这种情况吗?我已经尝试以多种方式对 p 值进行硬编码,但当我真的需要 equat(D_) 值和 1-equat(D_) 值时,我无法理解该怎么做。提前致谢!
    • @Keebles 当您将D_ 传递给equat 时,它的类型是什么?它应该是一个变量。如果它是一个数组,equat 的输出也将是一个数组。就是这样,your_p 必须是单个变量 (0 <= your_p <= 1) 而不是数组。
    • 我认为是这样,我认为我只是在将其作为单个变量时遇到了问题。现在都在运行。再次感谢!
    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2011-02-15
    • 2019-05-10
    • 1970-01-01
    • 2013-08-27
    相关资源
    最近更新 更多