2017-06-12 19 views
0

我试图用scipy,numpy显示泊松分布。如何修复python编程中的不同结果

泊松分布定义:

exp(-lambda) * (lambda^k)/k! 

k是随机变量范围从0到255和λ是参数选择25.

x = np.linspace(0, 255, 256) 
(np.exp(-lambda)*np.power(lambda,x))/scipy.misc.factorial(x) 

result in debugging monitor

plot result

从上面的数字看起来像李ke好结果...

但是,如果我用单个值而不是使用linspace计算它,所有结果都为零。 例如

x = 20 
(np.exp(-lambda)*np.power(lambda,x))/scipy.misc.factorial(x) 

结果= 0 ...

但以往结果使用linspace具有0.00886

+0

什么Python版本? –

+0

嗯我似乎无法复制python2和python3中的错误 –

回答

0

有些时候,最明显的解决方案可能是就在我们面前,仍然是看不见的开发商。

尝试这样做:

x = 20 
(np.exp(-lambda)*np.power(lambda,x))/scipy.misc.factorial(x * 1.0) 

我们以1.0乘以X“转换”到一个浮动,因此可以分工做正确小数

+0

我认为分子已经评估为浮点数,所以它可能没有什么区别。但是,值得一击的OP! –

+0

@Floaterz 谢谢。我试着把价值20.0而不是20它工作! 你能解释一下为什么会发生这种情况吗? –

+0

以我作为程序员的经验,当我试图做一个乘法,并希望得到一些精度与结果时,我总是尝试在公式中有一些数字与x.0这意味着编译器将它视为一个浮点数,主要结果将导致更精确的测量。 实施例: 1/2 = 0 但 1.0/2 = 0.5 或 1/2.0 = 0.5 如果方程不包含任何浮点数,主要结果将总是地板的结果,所以5.7变为5而0.5变为0.另一方面,拥有浮动解决了这个问题 – Floaterz

相关问题