2017-10-20 3 views
0

乗することはできませんので、私を含むコードのシンプルな作品を書いた:あなたが見ることができるようにnp.arangeは()私はPyCharmで何かをしようとしていた適切

xlist = np.arange(99995,99996) 
print(xlist*xlist) 
>>> array([1409065433]) 

を、答えは間違っています!

xlist = np.arange(0,100000) 

for x in xlist: 
    print(x) 
    z = x * x 
    print(z) 
print(xlist*xlist) 

と私の友人の90000

三つの周りにxの負の値を含む多くの奇妙な結果を得たが、コードのこの部分をテストした:私はもともと書いたので、私はこのつまずい9999000025.を取得する必要があります2つは私のものと同じ結果を得て(Windowsの場合)、もう1つはLinuxの場合は正しいので、OSに依存しているようです...

誰でも何が起こっているのですか?

+2

Python3のintは任意精度です。ナンシー整数はデフォルトで32ビットまたは64ビットであるため、任意に大きくすることはできず、オーバーフローが発生する可能性があります。 –

+2

これを行う前に 'dtype = np.int64'を指定してください。 –

+0

@AndrasDeak:必ずしも64ビットである必要はありません。プラットフォームによって異なります。 – user2357112

答えて

3

9999000025は、32ビットintに収まりません。通常のPython intとは異なり、NumPyデータ型は固定サイズであり、保持できる値には制限があります。

ここでの修正は、dtype=np.int64を指定することです。

x = np.arange(99995,99996, dtype=np.int64) 
print(x * x) 
Out[155]: array([9999000025]) 
関連する問題