2017-10-31 13 views
1

用負の値を返し、私は1963年の3乗のためのPythonを頼む場合は、私が取得:のPython 3.6.1 - Numpy.powerは、正の整数の数のキューブパワー

In[1]: 1963**3 
Out[1]: 7564163347 

しかし、私は配列を定義し、numpyのを頼めば私が得るキューブのパワーを返すためのパワー:

なぜいくつかの数値が正しく返されますが、他の数値は返されないのですか?すべての数値を元の配列のfloatとしてマークする必要がありますか?配列に問題はありますが、キューブのパワー(1961 ** 3など)を直接求めているのではないのはなぜですか?

私はこの作品に気づい:

In[1]: a=nu.array([1, 3, 5, 1963.0]) 
In[2]: nu.power(a) 
Out[2]: array([1.00000000e+00, 2.70000000e+01, 1.25000000e+02, 7.56416335e+09]) 

感謝を!

+1

7564163347はint32のHTTPSの最大を超えて.wikipedia.org/wiki/2,147,483,647 –

+0

'7564163347'が' int32'をオーバーフローさせた場合、 'int64'を使う代わりに' np.array([1、3、5、1963]、dtype = 'int64 ') '。 – jonrsharpe

+0

関連:[Python RuntimeWarning:long scalarsでオーバーフローが発生しました](https://stackoverflow.com/q/7559595/190597) – unutbu

答えて

1

これは、1963の立方体が32ビット整数に格納できる最大数(2,147,483,647)よりも大きいために発生します。

a = nu.array([1, 3, 5, 1963], dtype="int64")

またはこのようlong Pythonのタイプを使用して::

は、あなたがこのようなdtypeパラメータを指定することによって行うことができ、この操作のために64ビット整数を使用するためにnumpyの指示する必要があります

a = nu.array([1, 3, 5, 1963L])

どちらも正しい出力を示します。

>>> nu.power(a, 3) array([1, 27, 125, 7564163347], dtype=int64)

EDIT:やったときに、これは発生しません 理由:Pythonは自動的にlong型に変換して出力するので、

1963**3

です。

EDIT2:// EN:、別の長いタイプを持っている唯一の最初の例は、Python 3で動作 謝罪、Pythonの3は、両方とも有効なPythonあるしない2.

+0

ありがとう、dtype = int64を追加することは、私が必要としていたものです。 – Floren