1. ホーム
  2. python

[解決済み] Python RuntimeWarning: ロングスカラーでオーバーフローが発生した

2022-02-02 18:55:13

質問

私はプログラミングの初心者です。最新のPython2.7プロジェクトで、以下のようなことに遭遇しました。

RuntimeWarning: long_scalars でオーバーフローが発生しました。

どなたか、これが何を意味するのか、また、どうすれば解決できるのか、詳しく教えていただけませんか?

コードは通っているのですが、警告を無視するのはどうなんでしょうか。

みたいなアペンド処理中に発生します。

SomeList.append(VeryLongFormula)

解決方法は?

同じ警告を出す例を示します。

import numpy as np
np.seterr(all='warn')
A = np.array([10])
a=A[-1]
a**a

イールド

RuntimeWarning: overflow encountered in long_scalars

上記の例では、以下の理由で発生します。 a はdtype int32 に格納される最大値です。 int32 は2**31-1です。このため 10**10 > 2**32-1 に格納できる数よりも大きな数になってしまうので、指数計算を行います。 int32 .

に依存することはできないことに注意してください。 np.seterr(all='warn') は、すべてのオーバーフローを検出するために のエラーが発生します。 例えば、32ビットのNumPyでは

>>> np.multiply.reduce(np.arange(21)+1)
-1195114496

64ビットNumPyの場合。

>>> np.multiply.reduce(np.arange(21)+1)
-4249290049419214848

オーバーフローエラーによるものでもありますが、どちらも警告なしで失敗します。正解は、21!イコール

In [47]: import math

In [48]: math.factorial(21)
Out[50]: 51090942171709440000L

numpyの開発者であるRobert Kernによると ,

<ブロッククオート

真の浮動小数点エラー(ハードウェア FPU が フラグ オーバーフローするようなアトミックな演算をするたびに 整数のオーバーフロー検出を自分たちで実装しています。それを は スカラーを実装することはできますが、配列はできません。 に対して 配列のアトミックな操作のたびに

そのため、適切な dtypes オーバーフローしないようにするためです。