Python错误:RuntimeWarning:在double_scalars中遇到溢出

时间:2017-09-30 06:02:05

标签: 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.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中数字可以是任何大小,但我是新手,所以我可能只是遗漏了一些东西。

任何有助于克服这一点的帮助将不胜感激。

谢谢

1 个答案:

答案 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]

因此数字大小似乎不是问题。