2017-09-30 8 views
1

で遭遇オーバーフロー私は以下のコードとタイトルにエラーに実行しています:Pythonのエラー:RuntimeWarning:double_scalars

print(func(10, 1500)) 

でこれを実行する

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では数字はどんなサイズでもできると思っていましたが、私は新しいので、何かが足りないかもしれません。

これを解決する助けがあれば幸いです。

はありがとう

+0

「i」の値は何ですか? – malioboro

+0

X <範囲(N + 1)内のiについてN : 範囲内のjについて(I + 1):範囲(X + 1)におけるkの 和= 0 : 和=和+リスト[I k-1] [j-k] これは、i-k-1が範囲内にあり、j-kも境界内にある場合にのみ呼び出されます。この – vinny

+0

を100%確信してください、 – Mitiku

答えて

0

いくつかの観察:まず、それはエラーなしで私のマシン上で実行されます。第2に、func()は何も返さないので、print(func(10, 1500))コールは常にNoneを出力します。 3番目に、1501×1501の行列状構造を作成しますが、各行の最初の11要素でのみ動作し、各行の最後の1490要素は0に設定され、インデックス範囲が正しくないかのように奇数に見えます。

>>> list 
<class 'list'> 
>>> sum 
<built-in function sum> 
>>> 

第四に、あなたはあなたの関数のスコープ内に彼らの本来の目的のためにそれらを使用することはできませんように良いアイデアではありません変数としてPythonの組み込み関数名を再定義しました

sum = sum + list[i - k - 1][j - k] 

は常時負起こっている:第五に、これらの指標の一つということ、あなたを知っている

sum = sum + list[10][-5] 

左端からこの行にアクセスしています(すべて0が表示されます)

第6に、sp.binom(i, j)へのコールを追加したので、問題のエラーを実行すると失敗します。 sp.binom()は、numpy.float64を返します。サイズはPythonの整数のようにはできません。

私はPython 3.6.0を実行しています。おそらく、あなたの環境に関する詳細情報を提供することができます。

I thought that numbers could be any size in this version of 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] 

だから、数の大きさは問題ではありません。

+0

私はまた、Python 3.6になっています。 (また、私は本当に最初のx要素が必要だということを理解していませんでした。私はそれを変更します) – vinny

+0

他に何が違うか分かりません。その正確なコードは私のためにそのエラーを投げます – vinny

+1

@vinny 'list'と' sum'変数の名前を一意の名前に変更して違いがあるかどうか調べてみましょう。 – cdlane