2017-10-20 67 views
0

我在PyCharm嘗試的東西,所以我寫了一段簡單的代碼包括:np.arange()不能正確平方

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

正如你所看到的,答案是不正確!我應該得到9999000025.我偶然發現了這一點,因爲我原來寫:

xlist = np.arange(0,100000) 

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

,得到了許多奇怪的結果,包括負值爲繞x 90000

三個朋友測試了這段代碼兩個獲得了與我相同的結果(在Windows上),另一個在Linux上得到了正確的結果,所以它似乎取決於操作系統...

任何人都知道這到底是怎麼回事?

+2

Python3 ints是任意精度的。 Numpy默認情況下是32位或64位,所以它們不能任意大,並且可能發生溢出。 –

+2

在執行此操作之前指定:'dtype = np.int64'。 –

+0

@AndrasDeak:不一定是64位。這取決於平臺。 – user2357112

回答

3

9999000025不適合32位int。與常規的Python整數不同,NumPy數據類型是固定大小的,並且它們可以容納的值有限制。

此處的修復方法是指定dtype=np.int64

x = np.arange(99995,99996, dtype=np.int64) 
print(x * x) 
Out[155]: array([9999000025])