如何修复python编程中的不同结果
我试图用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)
从上面的数字看起来像李ke好结果...
但是,如果我用单个值而不是使用linspace计算它,所有结果都为零。 例如
x = 20
(np.exp(-lambda)*np.power(lambda,x))/scipy.misc.factorial(x)
结果= 0 ...
但以往结果使用linspace具有0.00886
有些时候,最明显的解决方案可能是就在我们面前,仍然是看不见的开发商。
尝试这样做:
x = 20
(np.exp(-lambda)*np.power(lambda,x))/scipy.misc.factorial(x * 1.0)
我们以1.0乘以X“转换”到一个浮动,因此可以分工做正确小数
我认为分子已经评估为浮点数,所以它可能没有什么区别。但是,值得一击的OP! –
@Floaterz 谢谢。我试着把价值20.0而不是20它工作! 你能解释一下为什么会发生这种情况吗? –
以我作为程序员的经验,当我试图做一个乘法,并希望得到一些精度与结果时,我总是尝试在公式中有一些数字与x.0这意味着编译器将它视为一个浮点数,主要结果将导致更精确的测量。 实施例: 1/2 = 0 但 1.0/2 = 0.5 或 1/2.0 = 0.5 如果方程不包含任何浮点数,主要结果将总是地板的结果,所以5.7变为5而0.5变为0.另一方面,拥有浮动解决了这个问题 – Floaterz
什么Python版本? –
嗯我似乎无法复制python2和python3中的错误 –