我有一些在其计算中使用大整数的代码。因为我也使用numpy,所以似乎有些变量被设置为'numpy.int64'类型,这意味着它们超过了流量。我怎样才能解决这个问题?numpy代码溢出错误
如果您运行下面的代码,您将看到“调试信息”下的行。例如,
19 1 72.7204246831 524288
19 2 2437717.7229 274877906944
19 3 149857055799.0 144115188075855872
19 4 1.73379003246e+16 0
其中前两列是n和w,最后一列是2 **(n * w)。显然0是一个溢出错误。
我该如何解决这个问题?
#!/usr/bin/python
from __future__ import division
from scipy.misc import comb
from scipy.misc import factorial
import math
import numpy as np
N = 20
X = np.arange(2,N)
def k_loop_n(w,n):
K = np.arange(0, w+1)
return (comb(w,K)*(comb(w,K)/2**w)**n).sum()
def w_loop(n):
print "w loop"
v = [comb(n,w)*k_loop_n(w,n) for w in range(1,n+1)]
print v
return sum(v)
#This is meant to be an upper bound for sum (w choose i)^(n+1), i = 0..w
def sum_upper(i,n):
return (i+1)*((2**i)*math.sqrt(2/(i*np.pi))*(1-1/(4*i)))**(n+1)
def w_loop_upv2(n):
print "w loop upper bound"
print "debugging info"
print type(n)
for w in range(1,n+1):
print n, w, sum_upper(w,n), 2**(w*n)
v = [comb(n,w)*sum_upper(w,n)/2**(w*n) for w in range(1,n+1)]
return sum(v)
def upper_k_loop(w,n):
K = np.arange(0, w+1)
return (upperbin(w,K)*(upperbin(w,K)/2**w)**(3*float(n)/np.log(n))).sum()
def upper_w_loop(n):
v = [upperbin(n,w)*k_loop(w,n) for w in range(1,n+1)]
return sum(v)
print X
Y = [w_loop(n) for n in X]
Yupper = [w_loop_upv2(n) for n in X]
print Y
print Yupper
检查'np.long(2 ** 10000)' –