关于python计算中不一致性的奇怪问题

关于python计算中不一致性的奇怪问题,python,list-comprehension,Python,List Comprehension,我正在尝试使用Python学习泊松分布。 我想使用列表理解生成一个概率列表。 该公式保证不返回负数。 然而,当我在下面的列表理解中使用时,我得到了许多负数 请你解释一下我遗漏了什么导致了这个问题。 有关详细信息,请参见下面的行 谢谢大家 import math import numpy as np lam = 15 a = np.arange(30) b = [np.exp(-lam)*(lam**x)/math.factorial(x) for x in a] [3.05902320501

我正在尝试使用Python学习泊松分布。 我想使用列表理解生成一个概率列表。 该公式保证不返回负数。 然而,当我在下面的列表理解中使用时,我得到了许多负数

请你解释一下我遗漏了什么导致了这个问题。 有关详细信息,请参见下面的行

谢谢大家

import math
import numpy as np

lam = 15
a = np.arange(30)
b = [np.exp(-lam)*(lam**x)/math.factorial(x) for x in a]

[3.059023205018258e-07,
 4.588534807527386e-06,
 3.44140110564554e-05,
 0.000172070055282277,
 0.0006452627073085387,
 0.0019357881219256162,
 0.0048394703048140406,
 0.010370293510315801,
 -0.013141028594890315,
 -0.0001781617069955619,
 9.481664980368431e-05,
 -2.362463102985818e-06,
 -2.1020607345176417e-07,
 -3.1555253576611854e-08,
 -3.6677408619686507e-09,
 3.5112039118960344e-10,
 1.520183133726461e-11,
 -1.3618446037306896e-12,
 9.639826317732186e-14,
 4.996694908364656e-16,
 -1.6527804252450604e-16,
 1.052286501865168e-17,
 1.6130198477088384e-19,
 3.5537768829770886e-21,
 1.0354451630381044e-22,
 -2.257593163998853e-23,
 6.599657279663544e-27,
 3.666476266479747e-27,
 1.9641837141855786e-27,
 -2.4206987189043917e-29]
np.arange30的元素是numpy.int64s,它可以溢出负数:

>>> a = np.arange(30)
>>> 15**a[19]
-4608176067875183057
对于列表理解,您根本不需要NumPy:

lam = 15
a = range(30)
b = [math.exp(-lam)*(lam**x)/math.factorial(x) for x in a]
np.arange30的元素是numpy.int64s,它可以溢出负数:

>>> a = np.arange(30)
>>> 15**a[19]
-4608176067875183057
对于列表理解,您根本不需要NumPy:

lam = 15
a = range(30)
b = [math.exp(-lam)*(lam**x)/math.factorial(x) for x in a]

我无意中遇到的第一个社区wiki。我无意中遇到的第一个社区wiki。