2017-07-04 33 views
3

我Python.Trying手是初學者在學習numpy的結束。numpy的 - 人氣指數:爲什麼下面的例子不是10

import numpy as np 
x = np.arange(0.5, 10.4, 0.8, int) 

它輸出:

[ 0 1 2 3 4 5 6 7 8 9 10 11 12 ] 

我期待它返回(如最後一個項目是10.4):

[ 0 1 2 3 4 5 6 7 8 9 10 ] 

除了上面,如果我執行該(被理解本實施例中):

x = np.arange(0.5, 10.4, 0.8) 
print(x) 

它打印:

[ 0.5 1.3 2.1 2.9 3.7 4.5 5.3 6.1 6.9 7.7 8.5 9.3 10.1 ] 
+1

'np.arange(0.5,10.4,0.8,int)'和'np .arange(0.5,10.4,0.8)'具有相同數量的元素,所以如果不知道答案,我會猜想,元素的數量首先被確定,然後該步驟變成一個整數後... –

+2

The 'np.arange(0.5,10.5,0.4,int)'的結果甚至更好:'array([0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0])' –

+2

這工作:X =列表(地圖(INT,np.arange(0.5,10.4,0.8)) )。 – Beta

回答

7

這是一個非常奇怪的方式叫arange。這種行爲沒有記錄,我認爲沒有太多的想法。至少在當前版本中,基於source發生了什麼。

使用您傳遞的原始參數0.5,10.4和0.8,NumPy使用_calc_length輔助函數計算結果的長度和第二個元素。這些計算是在Python對象算術中完成的,並且長度被轉換爲一個整數npy_intp。在你的情況下,長度被計算爲13

NumPy的則分配所請求的數據類型和所計算的長度的陣列,並且其存儲在數組中的前兩個元素。隨着元素的存儲,它們將受到通常的NumPy dtype轉換。在你的情況下,前兩個元素被強制爲0和1.

最後,NumPy調用新數組的fill函數來填充從前兩個元素計算出的值。 fill函數重新計算前兩個元素的步驟,因此它計算1的一個步驟並使用從0到12的整數填充陣列。

+0

這是一個相當詳細的答案,我不期待這個很好的解釋。我會盡力從源頭上充分掌握耐心地理解它。豎起大拇指! –

相關問題