NumPy 建立陣列
Jinku Hu
2023年1月30日
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.]])