我在一个循环中运行一些代码,它运行数千个数据点,在某一点上我有这行代码:
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)
但这也不会崩溃。
有人建议错误可能是由评论输出后的行引起的。 我提到的那条之后的那条线看起来像这样:
weights[i,j] = math.exp(beta[j,i] + oneminusbeta[j,i])
我再次运行代码,而在上面的示例中,代码在weights[30816, 42]
上崩溃,这次它在weights[55399, 43]
上崩溃了。这意味着这次它不会溢出上面溢出的同一点,而是在另一个点。这意味着它不是python无法进行计算的问题。
但我使用的数据集与以前完全相同。 发生了什么事,这个任意问题有什么解决方案吗?我在64位机器上使用Anaconda Spyder。