如何根据每个单元格中的概率在矩阵中进行采样

时间:2016-11-08 14:16:50

标签: python

我试图在模式识别中对公式进行编码,但我找不到合适的功能来完成这项工作。问题是我有一个二元邻接矩阵A (M*N),并希望为每个单元格分配值10。每个单元格的固定概率P1,否则为零。我在python中搜索关于采样的方法,似乎大多数方法只支持列表中的几个元素而不考虑概率。我真的需要这方面的帮助,任何想法都表示赞赏。

2 个答案:

答案 0 :(得分:1)

你可以使用

A = (P > numpy.random.rand(4, 5)).astype(int)

P是你的概率矩阵。

为确保概率正确,您可以使用

进行测试
P = numpy.ones((4, 5)) * 0.2
S = numpy.zeros((4, 5))

for i in range(100000):
    S += (P > numpy.random.rand(4, 5)).astype(int)

print S          # each element should be approximately 20000
print S.mean()   # the average should be approximately 20000, too

答案 1 :(得分:0)

让我们说你的邻接概率矩阵如下:

# Create your matrix
matrix = np.random.randint(0, 10, (3, 3))/10.
# Returns :
array([[ 0. ,  0.4,  0.2],
       [ 0.9,  0.7,  0.4],
       [ 0.1,  0. ,  0.5]])

# Now you can use np.where
threshold = 0.5
np.where(matrix<threshold, 0, 1) # you can set your threshold as you like. 
# Here set to 0.5

# Returns :
array([[0, 0, 0],
       [1, 1, 0],
       [0, 0, 1]])