2017-09-18 8 views
2

でRuntimeWarning Nは整数numpy.power(2,N)を、使用している場合、私は次の問題に遭遇:のPython 3:numpy.power

In[1] np.power(2,63) 
Out[1] -9223372036854775808 
RuntimeWarning: invalid value encountered in power 

、さらに不思議なこと、

In[2] np.power(2,63)*2 
Out[2] 0 

をこれはすべてのために起こります63以上の指数です。私は、大きな整数はPythonでは問題ではないと考えました - ここで何が間違っていますか?

+2

ここではPython整数を扱っていませんが、NumPyが提供する高速ベクトル化演算の前提条件である固定サイズ(この場合は64ビット)のNumPy整数を扱っています。 Python intを使いたい場合は、 '2 ** 63'か' pow(2、63) 'と書いてください。 – jasonharper

答えて

2

大きな整数はPythonには問題ありません。なぜなら、Pythonは整数型が1つしかなく、それは任意の精度であるからです。しかしNumPy uses normal "C" data typesと、これらは精度が限られている:ほとんどのシステムで64ビットで

>>> 2 ** 63    # Python 
9223372036854775808 

>>> np.int64(2) ** 63 # NumPy 
-9223372036854775808 

は、プレーンnumpyので利用可能な最高精度の整数型です。したがって、より大きい数値を扱う場合は、float dtypesを使用するか、通常のリストまたはNumPyオブジェクト配列(実際はお勧めしません)でPython整数を使用することができます。