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