亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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 方法,轉化成多維矩陣。