百度PaddlePaddle入門-6 (Numpy應用)



 

線性代數

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]]
下面為補充資料:
A
的矩陣, B
的矩陣,那么稱
的矩陣 C為矩陣 AB的乘積,記作
,其中矩陣C中的第
行第
列元素可以表示為: [1]  
如下所示:
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代數余子式。例如:
一個n×n矩陣的行列式等於其任意行(或列)的元素與對應的代數余子式乘積之和,即 [1]   :
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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM