Python错误:运行时警告:双_标量中遇到溢出

Python错误:运行时警告:双_标量中遇到溢出,python,python-3.x,Python,Python 3.x,我在标题中遇到错误,代码如下: 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.bino

我在标题中遇到错误,代码如下:

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
返回错误:

RuntimeWarning: overflow encountered in double_scalars
sum = sum + list[i - k - 1][j - k]
它一直工作到刚好超过
n=1000

我正在使用python 3.6。我原以为在这个版本的python中,数字可以是任意大小的,但我是新手,所以我可能只是缺少了一些东西

任何帮助克服这一问题的人都将不胜感激


谢谢你

一些观察:首先,它在我的机器上运行,没有错误;其次,
print(func(101500))
调用始终打印
None
,因为
func()
不返回任何内容;第三,它创建了一个类似1501×1501矩阵的结构,但只对每行的前11个元素进行操作,将每行的最后1490个元素设置为0,这看起来很奇怪,好像索引范围不正确

第四,您已经将Python内置函数名重新定义为变量,这不是一个好主意,因为您不能在函数的范围内将它们用于其原始用途:

>>> list
<class 'list'>
>>> sum
<built-in function sum>
>>> 
有时会出现负值:

sum = sum + list[10][-5]
因此,您是从左端(所有零都在左端)访问此行的

第六,既然您添加了一个对sp.binom(i,j)的调用,那么当我运行它时,它会失败,并出现问题。您是否知道
sp.binom()
返回一个
numpy.float64
,它的大小不能像Python整数那样大

我正在运行Python3.6.0——也许您可以提供有关您的环境的更多信息

我认为在这个版本的python中,数字可以是任意大小的

列表的最后一行是:

[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]

所以数字大小似乎不是问题。

一些观察结果:首先,它在我的机器上运行,没有错误;其次,
print(func(101500))
调用始终打印
None
,因为
func()
不返回任何内容;第三,它创建了一个类似1501×1501矩阵的结构,但只对每行的前11个元素进行操作,将每行的最后1490个元素设置为0,这看起来很奇怪,好像索引范围不正确

第四,您已经将Python内置函数名重新定义为变量,这不是一个好主意,因为您不能在函数的范围内将它们用于其原始用途:

>>> list
<class 'list'>
>>> sum
<built-in function sum>
>>> 
有时会出现负值:

sum = sum + list[10][-5]
因此,您是从左端(所有零都在左端)访问此行的

第六,既然您添加了一个对sp.binom(i,j)
的调用,那么当我运行它时,它会失败,并出现问题。您是否知道
sp.binom()
返回一个
numpy.float64
,它的大小不能像Python整数那样大

我正在运行Python3.6.0——也许您可以提供有关您的环境的更多信息

我认为在这个版本的python中,数字可以是任意大小的

列表的最后一行是:

[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]

所以数字大小似乎不是一个问题。

i的值是什么?xn
的值是多少?什么是
列表
?请给我。并更新你的帖子(通过编辑),而不是放在评论部分。它给我的是/mnt/c/Users/xxxxx/xxx/program.py:27:RuntimeWarning:double_scalars sum=sum+list[i-k-1][j-k]中遇到溢出返回的数字是inf
i
的值是多少?xn的值是多少?什么是
列表
?请给我。并更新您的帖子(通过编辑),而不是放在评论部分。它给我的是/mnt/c/Users/xxxxx/xxx/program.py:27:RuntimeWarning:double_scalars sum=sum+list[i-k-1][j-k]返回的数字也是python 3.6上的infI am。(也没有发现我真的只需要第一个x元素,哈哈,我会改变的)不确定还有什么不同。正是这段代码引发了这个错误me@vinny,尝试将您的
列表
总和
变量重命名为唯一名称,以查看这是否有任何区别。进行了这些更改后,它仍在工作,但对于我真正需要的用例,它仍然失败,我将在OP右侧更新它now@vinny,我在列表中添加了另一个关于负索引的问题。再次检查numpy的内容是否真的消失了,因为这个错误消息通常与numpy相关。(也没有发现我真的只需要第一个x元素,哈哈,我会改变的)不确定还有什么不同。正是这段代码引发了这个错误me@vinny,尝试将您的
列表
总和
变量重命名为唯一名称,以查看这是否有任何区别。进行了这些更改后,它仍在工作,但对于我真正需要的用例,它仍然失败,我将在OP右侧更新它now@vinny,我在列表中添加了另一个关于负索引的问题。再次检查numpy内容是否真的消失了,因为此错误消息通常与numpy相关。