Numpy 數(shù)組創(chuàng)建方法
在數(shù)組的屬性和方法這一小節(jié)中我們學(xué)習(xí)到了如何查看數(shù)組的大小、維數(shù)(秩)、元素的數(shù)據(jù)類型、每個(gè)元素的大小等等。這一小節(jié)將詳述如何從數(shù)值范圍創(chuàng)建特殊數(shù)組,比如指定間隔的等差數(shù)列型數(shù)組、等比數(shù)列型數(shù)組等。
1. 創(chuàng)建等間隔序列數(shù)組
通常定義一個(gè)等間隔序列數(shù)組(即等差數(shù)組),需要指定某些具體要素,例如起始值、終止值、步長、樣本數(shù)量等。主要功能類似于 Python 內(nèi)置的 range 函數(shù),但是返回的是一個(gè) ndarray。
1.1 numpy.arange 函數(shù)
arange 函數(shù)可以通過指定起始值、終止值、步長的方式,來創(chuàng)建一個(gè)我們需要的數(shù)組。其函數(shù)調(diào)用方法如下:
numpy.arange(start, stop, step=1, dtype=None)
構(gòu)造函數(shù)接受的參數(shù)詳解如下:
參數(shù) | 描述 |
---|---|
start | 待創(chuàng)建數(shù)組序列的起始值,默認(rèn)為0 |
stop | 終止值。和range類似,創(chuàng)建的序列結(jié)果不包含終止值。 |
step | 步長,默認(rèn)為1 |
dtype | 返回ndarray 的數(shù)據(jù)類型,如果沒有提供,則自動(dòng)根據(jù)輸入?yún)?shù)的類型進(jìn)行推測 |
案例
創(chuàng)建一個(gè)長度為 10 的一維整數(shù)類型的數(shù)組。
np.arange(0,100,10, dtype=np.int32)
Out:
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
可以看到數(shù)組并不包含終止值,是 [start, stop) 的區(qū)間。
在某些情況下,可以結(jié)合 reshape 函數(shù)使用,生成具有等差數(shù)列特性的數(shù)組矩陣:
np.arange(0,100,5, dtype=np.float16).reshape(4,5)
Out:
array([[ 0., 5., 10., 15., 20.],
[25., 30., 35., 40., 45.],
[50., 55., 60., 65., 70.],
[75., 80., 85., 90., 95.]], dtype=float16)
1.2 numpy.linspace 函數(shù)
linspace 函數(shù)的功能是生成在某一確定區(qū)間內(nèi)的一維數(shù)組,但是功能相較于 arange 更加強(qiáng)大。其函數(shù)調(diào)用方法如下:
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
構(gòu)造函數(shù)接受的參數(shù)詳解如下:
參數(shù) | 描述 |
---|---|
start | 待創(chuàng)建數(shù)組序列的起始值,默認(rèn)為0 |
stop | 終止值,如果endpoint為True,該值包含于數(shù)列中 |
num | 要生成的等步長的樣本數(shù)量,默認(rèn)為50 |
endpoint | 該值為 True時(shí),數(shù)列中中包含stop值,反之不包含,默認(rèn)是True。 |
retstep | 若為 True ,函數(shù)會(huì)同時(shí)返回步長 |
dtype | 返回ndarray的數(shù)據(jù)類型,如果沒有提供,則自動(dòng)根據(jù)輸入?yún)?shù)的類型進(jìn)行推測 |
案例
創(chuàng)建一個(gè)長度為 10 的一維整數(shù)類型的數(shù)組。
np.linspace(0, 10, endpoint=False, num=10, dtype=np.int32)
Out:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
觀察發(fā)現(xiàn):endpoint 設(shè)置為 False,生成的數(shù)組不包含終止值 10。
當(dāng)然,想達(dá)到同樣的效果,還可以這樣寫:
np.linspace(0, 9, endpoint=True, num=10, dtype=np.int32)
Out:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
當(dāng)指定 retstep 為 True 時(shí),linspace 函數(shù)會(huì)返回一個(gè)由數(shù)組和步長組成的、長度為2的元祖:
np.linspace(0, 9, endpoint=True, num=10, retstep=True, dtype=np.int32)
Out:
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 1.0)
2. 創(chuàng)建等比序列數(shù)組
類似的,創(chuàng)建等比序列數(shù)組的過程,也是由起始值、終止值、樣本數(shù)量等元素統(tǒng)一定義的,但是在使用具體函數(shù)的時(shí)候,有些許不同。
2.1 numpy.logspace 函數(shù)
logspace 函數(shù)是通過指定基數(shù)、基數(shù)的起始指數(shù)、基數(shù)的終止指數(shù)、樣本數(shù)量等元素,來定義一個(gè)等比數(shù)列。其函數(shù)調(diào)用方法如下:
numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
構(gòu)造函數(shù)接受的參數(shù)詳解如下:
參數(shù) | 描述 |
---|---|
start | 數(shù)列的起始值,表示以base為底的冪的指數(shù) |
stop | 數(shù)列的終止值,表示以base為底的冪的指數(shù);如果endpoint為True,冪包含于數(shù)列中 |
num | 要生成的樣本數(shù)量,默認(rèn)為50 |
endpoint | 該值為 True時(shí),數(shù)列中中包含stop值,反之不包含,默認(rèn)是True |
base | 基數(shù) |
dtype | 返回ndarray的數(shù)據(jù)類型,如果沒有提供,則自動(dòng)根據(jù)輸入?yún)?shù)的類型進(jìn)行推測 |
案例
當(dāng)定義指定公比的等比數(shù)列時(shí),logspace 函數(shù)非常方便。例如,定義一個(gè)2(2的1次方)、4(2的2次方)、……、1024(2的10次方),長度為10的一維等比數(shù)組:
np.logspace(1, 10, num=10, endpoint=True, base=2, dtype=np.int32)
Out:
array([ 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024])
通過對該案例的研究,可以看出:
通過 logspace 創(chuàng)建的等比數(shù)列,起始值是以 base=2 為底、start=1 為指數(shù)的冪,終止值是以 base=2 為底、stop=10 為指數(shù)的冪,并指定樣本數(shù)量生成的。生成的等比數(shù)列的指數(shù)滿足等差數(shù)列分布的形式,因此logspace 函數(shù)產(chǎn)生的數(shù)列又稱為對數(shù)等差數(shù)列。
2.2 numpy.geomspace函數(shù)
geomspace 通過指定起始值、終止值、樣本數(shù)量,來返回相對應(yīng)的等比數(shù)組。
和 logspace 最大的不同在于,geomspace 并不需要事先指定 base(基數(shù)),其函數(shù)調(diào)用方法如下:
numpy.geomspace(start, stop, num=50, endpoint=True, dtype=None)
構(gòu)造函數(shù)接受的參數(shù)詳解如下:
參數(shù) | 描述 |
---|---|
start | 待創(chuàng)建數(shù)組序列的起始值 |
stop | 終止值,如果endpoint為True,該值包含于數(shù)列中 |
num | 要生成的樣本數(shù)量,默認(rèn)為50 |
endpoint | 該值為 True時(shí),數(shù)列中中包含stop值,反之不包含,默認(rèn)是True。 |
dtype | 返回ndarray的數(shù)據(jù)類型,如果沒有提供,則自動(dòng)根據(jù)輸入?yún)?shù)的類型進(jìn)行推測 |
案例
同樣的,生成 1-1024 長度為 10 的等比數(shù)列,可以有如下語句:
np.geomspace(2, 1024, 10, endpoint=True, dtype=np.int32)
Out:
array([ 2, 4, 7, 16, 32, 64, 127, 256, 512, 1024])
geomspace 函數(shù)的語法相對簡單,只需要指定起始值、終止值、樣本數(shù)量,即可確定一個(gè)等比數(shù)列。
3. 小結(jié)
本節(jié)主要介紹了等差和等比數(shù)組的創(chuàng)建方法,和 Python 內(nèi)置的 range 函數(shù)不同的是,在 numpy 中,你可以靈活地指定 endpoint 參數(shù)來決定終止值是否包含在數(shù)列區(qū)間內(nèi)。特別的,創(chuàng)建的一維數(shù)組可以非常方便的用 reshape 方法,轉(zhuǎn)化成多維矩陣。