python numpy linspace函數(shù)使用詳解
python numpy linspace函數(shù)
前言
用plt畫圖的時(shí)候,偶爾會(huì)看到這個(gè)函數(shù)的出現(xiàn),索性直接深入源碼實(shí)戰(zhàn)進(jìn)行復(fù)現(xiàn)
主要功能:在線性區(qū)域中生成等間距的序列,原先在Numpy中可以用numpy.arange(),但對(duì)于浮點(diǎn)數(shù)會(huì)有精度丟失,因此 linspace()對(duì)于浮點(diǎn)數(shù)比較友好。適當(dāng)?shù)膮?shù),兩者都可選擇。
1. 函數(shù)講解
具體源碼:numpy.linspace(start, end, num=num_points,endpoint=False,retstep=True,axis=0,dtype=int)
參數(shù)講解:
- 對(duì)應(yīng)的序列在【start,end】,共有num_points個(gè)元素
- endpoint默認(rèn)為True。如果設(shè)置為False,對(duì)應(yīng)的序列在【start,end),通俗的說(shuō)不包括最后一個(gè)元素,同樣共有num_points個(gè)元素
- retstep默認(rèn)為False。如果設(shè)置為True,則返回的序列結(jié)果為一個(gè)元組,對(duì)應(yīng)的序列在【start,end】
- axis設(shè)置軸來(lái)存儲(chǔ),只可數(shù)組類型才可編譯。默認(rèn)為0,在開始處插入新軸。為-1,為序列末尾軸。
- dtype默認(rèn)類型為int,很多時(shí)候輸出為float類型。
2. 實(shí)戰(zhàn)講解
該函數(shù)最基本的使用如下:
import numpy as np import matplotlib.pyplot as plt x1 = np.linspace(-5, 5, 5) # 讓y直接為0 y = np.zeros(5) # 畫圖,具體用*號(hào)表示 plt.plot(x1, y, '*') # 設(shè)置當(dāng)前軸的y限制 plt.ylim([-0.5, 0.5]) plt.show() # 輸出 [-5. -2.5 0. 2.5 5. ] print(x1) # 輸出的長(zhǎng)度為 5 print(len(x1))
截圖如下:

如果設(shè)置endpoint參數(shù),對(duì)應(yīng)不保存最后一個(gè)關(guān)鍵字,具體代碼如下:
import numpy as np import matplotlib.pyplot as plt x1 = np.linspace(-5, 5, 5,endpoint=False) y = np.zeros(5) plt.plot(x1, y, '*') plt.ylim([-0.5, 0.5]) plt.show() ## 注意其中的區(qū)別 ## # 輸出 [-5. -3. -1. 1. 3.] print(x1) # 輸出的長(zhǎng)度為 5 print(len(x1))
截圖如下:

如果設(shè)置retstep參數(shù),對(duì)應(yīng)輸出的結(jié)果為元組類型
(注意其中的代碼區(qū)別)
import numpy as np import matplotlib.pyplot as plt x1 = np.linspace(-5, 5, 5,retstep=True) y = np.zeros(5) # 代碼無(wú)法使用,因?yàn)槭窃M類型,無(wú)法畫圖 # plt.plot(x1, y, '*') # plt.ylim([-0.5, 0.5]) # plt.show() # ## 注意其中的區(qū)別 ## # 輸出(array([-5. , -2.5, 0. , 2.5, 5. ]), 2.5) print(x1) # 輸出的長(zhǎng)度為 2 print(len(x1))
如果設(shè)置axis參數(shù),對(duì)應(yīng)的代碼區(qū)別如下:
import numpy as np import matplotlib.pyplot as plt x1 = np.array([[1, 2], [3, 4]]) x2 = np.array([[5, 6], [7, 8]]) s = np.linspace(x1,x2,3, axis=1) print(s) # 輸出的長(zhǎng)度為 2 print(len(s))
axis=1輸出結(jié)果為:
[[[1. 2.]
[3. 4.]
[5. 6.]]
[[3. 4.]
[5. 6.]
[7. 8.]]]
axis=0輸出結(jié)果為:
[[[1. 2.]
[3. 4.]]
[[3. 4.]
[5. 6.]]
[[5. 6.]
[7. 8.]]]
補(bǔ)充:python numpy 中l(wèi)inspace函數(shù)
python numpy 中l(wèi)inspace函數(shù)
numpy提供linspace函數(shù)(有時(shí)也稱為np.linspace)是python中創(chuàng)建數(shù)值序列工具。與Numpy arange函數(shù)類似,生成結(jié)構(gòu)與Numpy 數(shù)組類似的均勻分布的數(shù)值序列。兩者雖有些差異,但大多數(shù)人更愿意使用linspace函數(shù),其很好理解,但我們需要去學(xué)習(xí)如何使用。
本文我們學(xué)習(xí)linspace函數(shù)及其他語(yǔ)法,并通過(guò)示例解釋具體參數(shù)。最后也順便提及np.linspace 和 np.arange之間的差異。
1. 快速了解
通過(guò)定義均勻間隔創(chuàng)建數(shù)值序列。其實(shí),需要指定間隔起始點(diǎn)、終止端,以及指定分隔值總數(shù)(包括起始點(diǎn)和終止點(diǎn));最終函數(shù)返回間隔類均勻分布的數(shù)值序列。請(qǐng)看示例:
np.linspace(start = 0, stop = 100, num = 5)
代碼生成 NumPy 數(shù)組 (ndarray 對(duì)象),結(jié)果如下:array([ 0., 25., 50., 75., 100.])
如圖:

讓我們解釋下,Numpy linspace函數(shù)依照定義間隔生成均勻分布的數(shù)值。我們使用start和stop參數(shù)指定間隔,這里我們?cè)O(shè)定為0和100,同時(shí)指定在范圍內(nèi)生產(chǎn)5個(gè)觀測(cè)值,因此函數(shù)生成5個(gè)均勻分布的元素。第一個(gè)是0,最后一個(gè)100,其他三個(gè)分布在0和100之間。
下面我們?cè)敿?xì)看下linspace函數(shù)的參數(shù),讓你更清楚理解其機(jī)制。
2. linspace函數(shù)語(yǔ)法
linspace的語(yǔ)法非常簡(jiǎn)單直接。如下圖所示,首先是函數(shù)名稱,對(duì)應(yīng)代碼為 np.linspace (假設(shè)你已導(dǎo)入importe NumPy as np)。

圖2
上圖有三個(gè)參數(shù),是平常使用最頻繁的三個(gè)參數(shù)。還有其他的可選參數(shù),下面我們討論其參數(shù)。
為了理解參數(shù),我們?cè)俅慰磮D示:

start
start 參數(shù)數(shù)值范圍的起始點(diǎn)。如果設(shè)置為0,則結(jié)果的第一個(gè)數(shù)為0.該參數(shù)必須提供。
stop
stop 參數(shù)數(shù)值范圍的終止點(diǎn)。通常其為結(jié)果的最后一個(gè)值,但如果修改endpoint = False, 則結(jié)果中不包括該值(后面示例會(huì)說(shuō)明)。
num (可選)
num 參數(shù)控制結(jié)果中共有多少個(gè)元素。如果num=5,則輸出數(shù)組個(gè)數(shù)為5.該參數(shù)可選,缺省為50.
endpoint (可選)
endpoint 參數(shù)決定終止值(stop參數(shù)指定)是否被包含在結(jié)果數(shù)組中。如果 endpoint = True, 結(jié)果中包括終止值,反之不包括。缺省為True。
dtype (可選)
和其他的 NumPy 一樣, np.linspace中的dtype 參數(shù)決定輸出數(shù)組的數(shù)據(jù)類型。如果不指定,python基于其他參數(shù)值推斷數(shù)據(jù)類型。如果需要可以顯示指定,參數(shù)值為NumPy 和 Python支持的任意數(shù)據(jù)類型。
我們并不需要每次都使用所有參數(shù),如果缺省值可以滿足我們需求。一般start, stop, num 比 endpoint 和 dtype常用。
位置參數(shù) vs 命名參數(shù)
實(shí)際調(diào)用時(shí)無(wú)需顯示指定參數(shù)名稱,可以通過(guò)參數(shù)位置直接匹配:
np.linspace(0, 100, 5)
上面代碼和前面示例的功能一樣:np.linspace(start = 0, stop = 100, num = 5) 。
前者使用位置匹配,后者使用名稱匹配。位置匹配讓代碼簡(jiǎn)捷,名稱匹配使代碼更可讀,實(shí)際應(yīng)用中我們鼓勵(lì)使用名稱匹配調(diào)用函數(shù)。
3. 示例
下面通過(guò)示例學(xué)習(xí)每個(gè)參數(shù)含義。
3.1 從0到1,間隔為0.1的數(shù)值序列
np.linspace(start = 0, stop = 1, num = 11)
輸出結(jié)果為:
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
當(dāng)你需要百分比場(chǎng)景時(shí)比較有用。
3.2 從0 到 100,間隔為10的數(shù)值序列
np.linspace(start = 0, stop = 100, num = 11)
輸出結(jié)果為:
array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100.])
該示例和前面一樣,只是實(shí)際應(yīng)用很常用。
3.3 使用 endpoint 參數(shù)
前文提到,endpoint 參數(shù)決定終止值是否被包含在結(jié)果數(shù)組中。缺省為True,即包括在結(jié)果中,反之不包括,請(qǐng)看示例:
np.linspace(start = 1, stop = 5, num = 4, endpoint = False)
因?yàn)閑ndpoint = False,5不在結(jié)果中。結(jié)果為1到4。
array([ 1., 2., 3., 4.])
個(gè)人認(rèn)為該參數(shù)不夠直接,平時(shí)一般不使用。
3.4 手動(dòng)指定數(shù)據(jù)類型
默認(rèn)linspace根據(jù)其他參數(shù)類型推斷數(shù)據(jù)類型,很多時(shí)候,輸出結(jié)果為float類型。如果需要指定數(shù)據(jù)類型,可以通過(guò)dtype設(shè)置。該參數(shù)很直接,除了linspace其他函數(shù)也一樣,如:np.array,np.arange等。示例:
np.linspace(start = 0, stop = 100, num = 5, dtype = int)
這里dtype為int,結(jié)果為int類型,而不是float類型。
4. 總結(jié)
本文我們通過(guò)示例學(xué)習(xí)了linspace函數(shù)。如果你熟悉NumPy,一定也注意到還有np.arange函數(shù)。兩者最大差異是,linspace能夠精確控制終止值終值,而arange能夠更直接地控制序列中值之間的增量。
到此這篇關(guān)于python numpy 中l(wèi)inspace函數(shù)詳解的文章就介紹到這了,更多相關(guān)python numpy linspace函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 基于Twisted框架的文件夾網(wǎng)絡(luò)傳輸源碼
這篇文章主要介紹了Python 基于Twisted框架的文件夾網(wǎng)絡(luò)傳輸源碼,需要的朋友可以參考下2016-08-08
用Python+OpenCV對(duì)比圖像質(zhì)量的幾種方法
這篇文章主要介紹了用Python+OpenCV對(duì)比圖像質(zhì)量過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Python??處理?Pandas?DataFrame?中的行和列
這篇文章主要介紹了Python處理Pandas?DataFrame中的行和列,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
詳解pandas中iloc, loc和ix的區(qū)別和聯(lián)系
這篇文章主要介紹了詳解pandas中iloc, loc和ix的區(qū)別和聯(lián)系,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Python Paramiko實(shí)現(xiàn)SSHv2協(xié)議輕松管理遠(yuǎn)程服務(wù)器
這篇文章主要為大家介紹了Python Paramiko實(shí)現(xiàn)SSHv2協(xié)議輕松管理遠(yuǎn)程服務(wù)器,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
python實(shí)現(xiàn)aes加密及pycryptodome庫(kù)使用
AES算法是高級(jí)加密標(biāo)準(zhǔn),它是一種對(duì)稱加密算法,AES只有一個(gè)密鑰,這個(gè)密鑰既用來(lái)加密,也用于解密,這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)aes加密及pycryptodome庫(kù)使用的相關(guān)資料,需要的朋友可以參考下2023-10-10
淺談keras的深度模型訓(xùn)練過(guò)程及結(jié)果記錄方式
今天小編就為大家分享一篇淺談keras的深度模型訓(xùn)練過(guò)程及結(jié)果記錄方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01

