Numpy 中 linspace 和 arrange 的用法和區別

在繪圖或者計算函數值的時候,我們常常需要生成一些序列,比如生成 0~1000 之間的整數。這時,我們經常用到 Numpy 中的 linspace 和 arange 函數。然而稍不注意,兩者就容易用錯,特別是linspace,現在對兩者的用法和區別說明如下,並指出兩者容易用錯的地方。

1、arange 函數的用法

爲了便於分析,我們假設要生成 0~10 間的整數序列 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],首先 arange 的用法如下:

import numpy as np
x = np.arange(0,10,1) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],注意,沒有10

這是arange 的用法:arange(起始值,結束值,間隔) ,需要注意的是,結束值(本例中爲10)並不包含在生成的序列中

2、linspace 函數的用法

同樣,我們可以用 linespace 函數來生成這個序列,它的用法爲——linspace(起始值,結束值,起始值和結束值之間的個數) ,這樣就可以生成等分間隔的序列。但是,針對上述問題,我們很容易想當然地寫出以下代碼:

x=np.linspace(0,10,10) # [ 0.        ,  1.11111111,  2.22222222,  3.33333333,  4.44444444,     5.55555556,  6.66666667,  7.77777778,  8.88888889, 10.        ]

實際上這是錯誤的寫法,它生成的序列爲 [ 0.        ,  1.11111111,  2.22222222,  3.33333333,  4.44444444,     5.55555556,  6.66666667,  7.77777778,  8.88888889, 10.        ],很顯然,不符合我們的預期,那麼問題出在哪裏呢? 它的問題出在 linespace 函數把結束值也包含在生成的序列中,所以兩數之間的間隔就變成了10/9,要解決這個問題,有兩種辦法:

第一種方法是把 linspace 的結束值設爲 9:

x = np.linspace(0,9,10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

第二種方法是讓linspace 函數生成的序列不包含結束值:

x = np.linspace(0,10,10,endpoint=False) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

3、總結

1、arange(初始值,結束值,間隔) 生成的序列不包含結束值,linspace(初始值, 結束值, 值的個數) 生成的序列包含結束值。

2、如果要使 linspace 和 arrange 等效,可以用 linspace(初始值, 結束值, 值的個數, endpoint = False). 當然,兩者有各自的使用場景,儘量不要混用。arrange 適用於知道序列中相鄰兩數之間的間隔的情況下,比如生成一定範圍內奇數或者偶數的序列。linspace 適合序列長度和序列取值範圍已知的情況。比如採樣頻率爲1200 Hz, 也就是說 0~1s 之間有1200 個點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章