NumPy建立陣列

0元素矩陣

np.zeros

np.zeros可以用來建立以0為元素的矩陣,它的語法如下,

np.zeros(shape, dtype=float, order='C')

其中shape就是所要生成的矩陣的尺寸,可以為一維,二維和多維。資料型別預設為float64,當然你可以指定具體的其他資料型別。

我們來建立幾個零元素矩陣

>>> import numpy as np
>>> np.zeros(5)		# 生成一個元素為5個0的一維矩陣
array([0., 0., 0., 0., 0.])
>>> np.zeros(5, dtype='int8')	#生成一個元素為5個0的一維矩陣,資料型別為int8
array([0, 0, 0, 0, 0], dtype=int8)
>>> np.zeros((4, 3)) # 生成一個4行3列的零矩陣
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

np.empty

有些情況下,你只是想初始化一個矩陣為指定尺寸的矩陣,對裡面的初始化資料並不關心,那你可以使用np.empty來實現更快的初始化,但要注意的一點時,它並不保證裡面的資料為0。

我們可以通過%timeit來具體比較下np.empty()np.zeros()的執行時間,

In [1]: %timeit np.empty((100, 100))
    715 ns ± 11.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [2]: %timeit np.zeros((100, 100))
    4.03 µs ± 104 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

很明顯的,np.empty()在初始化的時候要比np.zeros()快得多,在矩陣尺寸為(100, 100)的測試條件下,它只需要大約17.5%的時間。

np.zeros_like

假如有些情況下,我們已經有一個矩陣,我們想生成一個跟它具有相同尺寸的零矩陣,我們可以用傳統的方法來建立,

test = np.array([[1,2,3],[4,5,6],[7,8,9]])
np.zeros(test.shape)

或者我們可以用NumPy的另外一個函式np.zeros_like()直接來生成,效率更高。

x = np.zeros_like(test)
注意
np.zeros_like()的形狀跟輸入矩陣一樣,而且資料型別也是一樣的。

1元素矩陣

np.ones

同理,我們也可以快速生成元素全為1的矩陣,np.ones()的用法和輸入引數跟np.zeros()的完全一致。

>>> import numpy as np
>>> np.ones(5)		# 生成一個元素為5個1的一維矩陣
array([1., 1., 1., 1., 1.])
>>> np.ones(5, dtype='int8')	#生成一個元素為5個1的一維矩陣,資料型別為int8
array([1, 1, 1, 1, 1], dtype=int8)
>>> np.ones((4, 3)) # 生成一個4行3列的元素為1的矩陣
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

np.ones_like

np.zeros_like一樣,np.ones_like可以用來更高效的生成與輸入矩陣具有相同形狀的元素為1的矩陣。

>>> test = np.array([[1.0,2.0,3.0],[4.0,5.0,6.0],[7.0,8.0,9.0]])
>>> np.ones_like(test)
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

對角矩陣

對角矩陣是對角線上元素為1,其他位置元素為0的矩陣。可以通過np.eye()函式來生成此型別矩陣,它的語法如下

np.eye(N, M=None, k=0, dtype=<class 'float'>, order='C')

其中,

引數名稱 資料型別 摘要
N INT 指定生成的矩陣的行數。
M INT (可選)預設值為None。 指定要生成的矩陣的列數。當它為None時,它變為與N相同的值。
k INT (可選)預設值為0。 0為主對角線位置,如果k的值為正,則1元素向上平移k次,如果k為負,則1元素向下平移k次,
dtype 資料型別 (可選)預設值為float 指定生成的陣列的元素的資料型別。

np.eye()舉例

>>> import numpy as np
>>> np.eye(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
>>> np.eye(4, 3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.],
       [0., 0., 0.]])
>>> np.eye(3, 4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.]])
>>> np.eye(4, k=1)
array([[0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.],
       [0., 0., 0., 0.]])

np.identity()

np.identity可以被看成是一種特殊的np.eye,它用來生成的矩陣是一個方陣,也就是行列數相等的矩陣。語法如下,

numpy.identity(n, dtype = float)
引數名稱 資料型別 說明
n INT 指定要生成的矩陣的大小。生成N×N方陣。
dtype 資料型別 (可選)預設值為float。 指定元素的資料型別。

np.identity()舉例

>>> import numpy as np
>>> np.identity(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

三角矩陣

可以通過np.tri()來生成三角矩陣,函式呼叫語法如下,

numpy.tri(N, M=None, k=0, dtype=<class 'float'>)

其輸入引數跟np.eye()類似,可以作為參考。

np.tri()舉例

>>> import numpy as np
>>> np.tri(3)
array([[1., 0., 0.],
       [1., 1., 0.],
       [1., 1., 1.]])
>>> np.tri(4, k=1)
array([[1., 1., 0., 0.],
       [1., 1., 1., 0.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])