Python:从几何分布生成

2024-10-01 15:40:35 发布

您现在位置:Python中文网/ 问答频道 /正文

这是最好的方法还是最有效的方法来从一个包含0的参数数组的几何分布中生成随机数?在

allids["c"]=[2,0,1,1,3,0,0,2,0]
[ 0 if x == 0 else numpy.random.geometric(1./x) for x in allids["c"]]

注意,我有点担心优化。在

编辑:

一点上下文:我有一个字符序列(即atcgga),我想扩展/压缩单个字符的运行(即,如果原始序列的运行是2'A's,我想模拟一个预期值为2'A's的序列,但根据几何分布而变化)。所有长度为1的字符我不想变长。在

所以如果

^{pr2}$

将输出(当rep[1, 0, 1, 1, 3, 0, 0, 1, 0]时)

"ATCGGGA"

Tags: 方法innumpy编辑for参数if序列
2条回答

这个呢:

counts = array([2, 0, 1, 1, 3, 0, 0, 2, 0], dtype=float)
counts_ma = numpy.ma.array(counts, mask=(counts == 0))
counts[logical_not(counts.mask)] = \
    array([numpy.random.geometric(v) for v in 1.0 / counts[logical_not(counts.mask)]])

您可以预先计算均聚物运行的分布,并将调用的数量限制为geometric,因为从rng获取大量值比单个调用更有效

可以使用masked array来避免被零除。在

import numpy as np
a = np.ma.masked_equal([2, 0, 1, 1, 3, 0, 0, 2, 0], 0)
rep = np.random.geometric(1. / a)
rep[a.mask] = 0

这将为a的每个元素生成一个随机样本,然后在稍后删除其中的一些元素。如果你担心随机数的浪费,你可以生成足够的随机数,如下所示:

^{pr2}$

相关问题 更多 >

    热门问题