python - Python中概率数组的离散化

标签 python numpy probability

我有一个 numpy 数组(实际上是从 GIS 栅格 map 导入的),其中包含 一个物种出现的概率值,如下例所示:

a = random.randint(1.0,20.0,1200).reshape(40,30)
b = (a*1.0)/sum(a)

现在我想再次获得该数组的离散版本。就像我有 例如位于该阵列区域的 100 个个体(1200 个单元)他们怎么​​样 分散式?当然应该按概率分配, 意味着较低的值表示较低的发生概率。然而,由于一切都是统计数据,仍然有可能以低概率找到一个人 细胞。应该可以多个个体占用一个cell...

就好像把一条连续的分布曲线又变成了直方图。就像许多不同的直方图可能导致特定的分布曲线一样,它也应该是相反的。因此,每次应用我正在寻找的算法都会产生不同的离散值。

...python 中是否有任何算法可以做到这一点?由于我不太熟悉离散化,也许有人可以提供帮助。

最佳答案

random.choicebincount 一起使用:

np.bincount(np.random.choice(b.size, 100, p=b.flat),
            minlength=b.size).reshape(b.shape)

如果您没有 NumPy 1.7,您可以将 random.choice 替换为:

np.searchsorted(np.cumsum(b), np.random.random(100))

给予:

np.bincount(np.searchsorted(np.cumsum(b), np.random.random(100)),
            minlength=b.size).reshape(b.shape)

关于python - Python中概率数组的离散化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11650324/

相关文章:

Python:配对匹配元素

python - 当我尝试运行 table.scan() 时,为什么 happybase 返回 "TSocket read 0 bytes"?

python - 堆叠分类器 : IndexError while fitting the data

python - 如何使用 Python nltk 的 ProbDistI 类

python - 我如何在 django rest 序列化程序中批量创建

python - 如何使用 Python timeit 模块捕获返回值?

python聚合来自两个数据框的列

python - 使用矩阵第一行的值作为 matplotlib.pyplot.imshow 的刻度

distribution - 在 Mathematica 中创建分布

java - 生成总和为 N 并遵循离散分布的随机数