在给定随机矩阵P的情况下,以概率P [i,j]随机选择对(i,j)

时间:2012-10-10 00:56:28

标签: python numpy statistics

我有numpy二维数组P,使得P [i,j]> = 0并且所有P [i,j]总和为1。如何以概率P [i,j]?

选择一对索引(i,j) 编辑:我对numpy构建函数很感兴趣。这个问题有什么问题吗?可能是一维数组?

3 个答案:

答案 0 :(得分:1)

这是python中的一个简单算法,可以满足您的需求。

让我们以单维数组P为[0.1,0.3,0.4,0.2]。逻辑可以扩展到任意数量的维度。

现在我们将每个元素设置为其前面所有元素的总和: P => [0,0.1,0.4,0.8,1]

使用随机生成器,我们生成介于0和1之间的数字。假设x = 0.2。 使用简单的二进制搜索,我们可以确定x位于第一个元素和第二个元素之间。我们只选择x的这个值的第一个元素。

仔细观察,0 =< X< 0.1是0.1。 0.1 =< x< 0.4是0.3,依此类推。

对于2D数组,最好将其转换为1D数组,即使您应该能够实现2D数组二进制搜索算法。

答案 1 :(得分:1)

# setup
import bisect
import numpy as np
cs = P.cumsum()

# get random value
r = np.random.uniform()
i, j = divmod(cs.searchsorted(r), P.shape[1])

O(n)初始设置,O(log n)选择。

答案 2 :(得分:0)

样本设置:

P = np.random.random((20, 10)) # Initializing P matrix
P = P/P.sum() # Normalizing probability matrix

P.ravel()展平概率矩阵P

ij = np.random.choice(range(P.size), p=P.ravel()) 

ij告诉使用概率矩阵P

中的权重随机选择P中的哪个元素
i, j = np.unravel_index(ij, P.shape) 

i, j是矩阵P

中所选元素的坐标