gpt4 book ai didi

python - 允许 64 位或更多位的 numpy.random.binomial 的替代方案?

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:12 25 4
gpt4 key购买 nike

我需要根据二项分布随机生成一系列数字。 Numpy 的随机套件提供了一种方法来执行此操作,但不幸的是,它似乎仅限于处理 n 值的 32 位数字,我想使用该范围之外的值。 64 位应该足够了,尽管任意更高的精度也可以。

示例输出:

>>> np.random.binomial(1<<40, 0.5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "mtrand.pyx", line 3506, in mtrand.RandomState.binomial (numpy\random\mtrand\mtrand.c:16555)
OverflowError: Python int too large to convert to C long

有没有我可以使用的替代方案?或者让 numpy 在此随机生成器内部使用 64 位数字的方法?

还是我需要自己准备好自己的车?

(正如 Robert Klein 所指出的,numpy 确实在除 Windows 之外的 64 位平台上执行 64 位操作;不幸的是我使用的是 Windows)。

最佳答案

在 C long 整数为 64 位的机器上,numpy.random.binomial() 将接受并生成 64 位整数。大多数 64 位平台(Windows 除外)都是这样。例如,在我的 64 位 OS X 机器上:

[~]
|11> np.random.binomial(1 << 40, 0.5)
549755265539

[~]
|12> np.random.binomial(1 << 40, 0.5) > (1<<32)
True

或者,如果您卡在 Windows 上,请考虑使用 Normal Approximation到二项分布。在如此大的 n 下,近似值应该非常好。

def approx_binomial(n, p, size=None):
gaussian = np.random.normal(n*p, sqrt(n*p*(1-p)), size=size)
# Add the continuity correction to sample at the midpoint of each integral bin.
gaussian += 0.5
if size is not None:
binomial = gaussian.astype(np.int64)
else:
# scalar
binomial = int(gaussian)
return binomial

关于python - 允许 64 位或更多位的 numpy.random.binomial 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23766009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com