我遇到了标题中的错误,代码如下:
from scipy import special as sp
def func(x, n):
coefs = [[0] * (n+1) for _ in range(n+1)]
for i in range(n+1):
for j in range(i+1):
if j <=x:
coefs[i][j] = sp.binom(i, j)
else:
sumation = 0
for k in range(x+1):
sumation = sumation + coefs[i - k - 1][j - k]
coefs[i][j] = sumation
使用
运行此功能print(func(10, 1500))
返回错误:
RuntimeWarning: overflow encountered in double_scalars
sum = sum + list[i - k - 1][j - k]
直到过去n = 1000
我正在使用python 3.6。我认为在这个版本的python中数字可以是任何大小,但我是新手,所以我可能只是遗漏了一些东西。
任何有助于克服这一点的帮助将不胜感激。
谢谢
答案 0 :(得分:0)
一些观察:首先,它在我的机器上运行没有错误;第二,print(func(10, 1500))
来电始终打印None
,因为func()
不会返回任何内容;第三,它创建了1501乘1501矩阵式结构,但只对每行的前11个元素进行操作,每行的最后1490个元素设置为0,看起来很奇怪,就像索引范围不正确一样
第四,您已经将Python内置函数名重新定义为变量并不是一个好主意,因为您无法在函数范围内将它们用于其原始目的:
>>> list
<class 'list'>
>>> sum
<built-in function sum>
>>>
第五,您是否知道其中一个指标:
sum = sum + list[i - k - 1][j - k]
有时会消极:
sum = sum + list[10][-5]
所以你要从左端访问这一行(所有的零都是。)
第六,既然您已经添加了对sp.binom(i, j)
的调用,当我运行该错误时,它就失败了。您是否知道sp.binom()
会返回numpy.float64
,其大小不能像Python整数。
我正在运行Python 3.6.0 - 也许您可以提供有关您的环境的更多信息。
我认为这个版本的python中的数字可以是任何大小
list
的最后一行是:
[1, 746, 185755, 23157624, 1736848299, 87162383901, 3138960008701, 85259372826713, 1813040043422321, 31075927633744029, 439493479567385970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ..., 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
因此数字大小似乎不是问题。