为什么一个非常小的数字返回'inf'而不是实数?

时间:2017-08-21 10:49:49

标签: python python-2.7 numpy

我运行了两个变量(H1H2)的更新,这些变量预计会产生类似的结果,但只有其中一个(H2)遇到RuntimeWarning: overflow encountered in double_scalars来自第35个迭代。我跟踪并发现H等式中有一部分可以返回1.48219693752e-323H2返回inf会导致该迭代中的所有等式误差。

1.48219693752e-323位于(-1.79769313486e+308, 1.79769313486e+308)之间。为什么其中一个返回inf?这里发生了什么?

额外信息:

for it in xrange(36): # for 35 iterations
    for k in xrange(kk):
        for j in xrange(jj):
            # update auxiliary
            gamma = H
            gamma2 = H2
            # update H
            H[k,j] = (gamma[k,j]/(2*lagrange)) * \
                     (( np.sqrt((sum(W[:,k]))**2 + \
                     (4*lagrange)*sum(V[:,j]*W[:,k]/np.dot(W[:,:],H[:,j]))) ) - \
                     sum(W[:,k]))
            H2[k,j] = (gamma2[k,j]/(2*lagrange)) * \
                     (( np.sqrt((sum(W[:,k]))**2 + \
                     ((4*lagrange/H2[k,j])*sum(gamma2[k,j]*V[:,j]*W[:,k]/np.dot(W[:,:],H2[:,j])))) ) - \
                     sum(W[:,k]))
            print H == H2
            print "for H: ", it, gamma[k,j], V[:,j]*W[:,k], sum(gamma[k,j]*V[:,j]*W[:,k])
            # gamma2[k,j] changes to be inf at 35th iteration but gamma[k,j] is fine
            print "for H2: ", gamma2[k,j], V[:,j]*W[:,k], sum(gamma2[k,j]*V[:,j]*W[:,k])

如果你想知道为什么它应该给出类似的结果,因为H2总和gamma2[k,j](应该作为系数拉出)并且应该除以H2[k,j](前面的术语)总和)为H2=gamma2

0 个答案:

没有答案