線性代數
Numpy中實現了線性代數中常用的各種操作,並形成了numpy.linalg線性代數相關的模塊。其中包括:
- diag 以一維數組的形式返回方陣的對角線(或非對角線)元素,或將一維數組轉換為方陣(非對角線元素為0)
- dot 矩陣乘法
- trace 計算對角線元素的和
- det 計算矩陣行列式
- eig 計算方陣的特征值和特征向量
- inv 計算方陣的逆
1 # 矩陣相乘 2 a = np.arange(12) 3 b = a.reshape([3, 4]) 4 c = a.reshape([4, 3]) 5 # 矩陣b的第二維大小,必須等於矩陣c的第一維大小 6 d = b.dot(c) # 等價於 np.dot(b, c) 7 print('a: \n{}'.format(a)) 8 print('b: \n{}'.format(b)) 9 print('c: \n{}'.format(c)) 10 print('d: \n{}'.format(d))
a: [ 0 1 2 3 4 5 6 7 8 9 10 11] b: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] c: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] d: [[ 42 48 54] [114 136 158] [186 224 262]]
下面為補充資料:

如下所示:



1 # numpy.linalg 中有一組標准的矩陣分解運算以及諸如求逆和行列式之類的東西 2 # np.linalg.diag 以一維數組的形式返回方陣的對角線(或非對角線)元素, 3 # 或將一維數組轉換為方陣(非對角線元素為0) 4 e = np.diag(d) 5 f = np.diag(e) 6 print('d: \n{}'.format(d)) 7 print('e: \n{}'.format(e)) 8 print('f: \n{}'.format(f))
d: [[ 42 48 54] [114 136 158] [186 224 262]] e: [ 42 136 262] f: [[ 42 0 0] [ 0 136 0] [ 0 0 262]]
1 # trace, 計算對角線元素的和 2 g = np.trace(d) 3 g
440
1 # det,計算行列式 2 h = np.linalg.det(d) 3 h
1.3642420526593978e-11
一個n×n的
方陣A的行列式記為det(
A)或者|
A|,一個2×2矩陣的行列式可表示如下:

把一個n階行列式中的元素a
ij所在的第i行和第j列划去后,留下來的n-1階行列式叫做元素a
ij的余子式,記作M
ij。記
A
ij=(-1)
i+j
M
ij,叫做元素a
ij的
代數余子式。例如:



1 # eig,計算特征值和特征向量 2 i = np.linalg.eig(d) 3 i
(array([4.36702561e+02, 3.29743887e+00, 3.13152204e-14]), array([[ 0.17716392, 0.77712552, 0.40824829], [ 0.5095763 , 0.07620532, -0.81649658], [ 0.84198868, -0.62471488, 0.40824829]]))
設 A 是n階方陣,如果存在數m和非零n維列向量 x,使得 Ax=mx 成立,則稱 m 是矩陣A的一個特征值(characteristic value)或本征值(eigenvalue)。
1 # inv,計算方陣的逆 2 tmp = np.random.rand(3, 3) 3 j = np.linalg.inv(tmp) 4 tmp, j
(array([[0.06156638, 0.49923069, 0.24846698], [0.32714403, 0.00291609, 0.29544213], [0.98688912, 0.23833271, 0.73339648]]), array([[-1.69687265, -7.62795567, 3.64773546], [ 1.28349546, -4.97212032, 1.56813898], [ 1.86628413, 11.88029355, -4.05462716]]))
Numpy保存和導入文件
Numpy還可以方便的進行文件讀寫,比如對於下面這種格式的文本文件:
1 # 使用np.fromfile從文本文件'housing.data'讀入數據 2 # 這里要設置參數sep = ' ',表示使用空白字符來分隔數據 3 # 空格或者回車都屬於空白字符,讀入的數據被轉化成1維數組 4 d = np.fromfile('./work/housing.data', sep = ' ') 5 d,d.size,d.shape
(array([6.320e-03, 1.800e+01, 2.310e+00, ..., 3.969e+02, 7.880e+00, 1.190e+01]), 7084, (7084,))
注意到shape輸出的形式。
Numpy還提供了save和load接口,直接將數組保存成文件(保存為.npy格式),或者從.npy文件中讀取數組。
1 # 產生隨機數組a 2 a = np.random.rand(3,3) 3 np.save('a.npy', a) 4 5 # 從磁盤文件'a.npy'讀入數組 6 b = np.load('a.npy') 7 8 # 檢查a和b的數值是否一樣 9 check = (a == b).all() 10 check
True