python中带有指数的相同代码的不同输出

时间:2014-09-12 07:08:32

标签: python loops numpy exponential

我在一个循环中运行一些代码,它运行数千个数据点,在某一点上我有这行代码:

z[i, j] = -math.exp(oneminusbeta[j, i])

我在每行代码之前添加了注释,并且在代码崩溃之前输出的最后一行注释是:

z[30416,20] = -math.exp(oneminusbeta (which is 8.04812689598e-13))

错误是:

OverflowError: math range error

这意味着上述行导致了崩溃。 但是,当我打开一个单独的控制台并键入此

a = -math.exp(8.04812689598e-13)
print str(a)

我的代码没有崩溃。它只是输出:

-1.0

发生了什么事?为什么在一堆代码的中间,将指数提升到这个功率会导致程序崩溃,但它不会崩溃?我该怎么做才能防止这种情况发生?或者我怎么知道python什么时候决定某个指数太多而无法处理并突然崩溃?

修改

与我初始化z的方式类似,我只是尝试了这个:

a = np.empty([1,1]) 
a[0,0] = -math.exp(8.04812689598e-13) 
print str(a)

但这也不会崩溃。

编辑2

有人建议错误可能是由评论输出后的行引起的。 我提到的那条之后的那条线看起来像这样:

weights[i,j] = math.exp(beta[j,i] + oneminusbeta[j,i])

编辑3

我再次运行代码,而在上面的示例中,代码在weights[30816, 42]上崩溃,这次它在weights[55399, 43]上崩溃了。这意味着这次它不会溢出上面溢出的同一点,而是在另一个点。这意味着它不是python无法进行计算的问题。

但我使用的数据集与以前完全相同。 发生了什么事,这个任意问题有什么解决方案吗?我在64位机器上使用Anaconda Spyder。

0 个答案:

没有答案