【问题标题】:How to fix different result in python programming如何修复python编程中的不同结果
【发布时间】:2017-06-12 14:44:44
【问题描述】:

我尝试使用 scipy、numpy 显示泊松分布。

定义泊松分布:

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

k 是从 0 到 255 的随机变量,lambda 是选择 25 的参数。

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

result in debugging monitor

plot result

从上面的数字来看,效果不错……

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

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

结果 = 0...

但是之前使用 linspace 的结果是 0.00886

【问题讨论】:

  • 什么 Python 版本?
  • 嗯,我似乎无法在 python2 和 python3 中复制您的错误

标签: python numpy overflow


【解决方案1】:

有时,最明显的解决方案可能就在我们面前,但开发人员仍然看不到。

尝试做:

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

我们将 x 乘以 1.0 以将其“转换”为浮点数,以便除法可以正确进行小数运算

【讨论】:

  • 我认为分子已经计算为浮点数,所以它可能没有区别。但好吧,值得一试 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。另一方面手,有一个浮动解决了这个问题
猜你喜欢
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2012-08-13
  • 1970-01-01
  • 2019-08-18
  • 2021-06-19
  • 1970-01-01
相关资源
最近更新 更多