自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

機器學習的數(shù)學 之python矩陣運算

開發(fā) 開發(fā)工具
矩陣屬于線性代數(shù)數(shù)學分支。線性代數(shù)是關(guān)于向量空間和線性映射的一個數(shù)學分支。它包括對線、面和子空間的研究,同時也涉及到所有的向量空間的一般性質(zhì)。

[[188138]]

本文提綱

1. 什么是矩陣

2. 矩陣在現(xiàn)實應用場景

3. 矩陣表示

4. 矩陣運算

5. 理解矩陣乘法

一、 什么是矩陣

一個 m × n 的矩陣是一個由 m 行 n 列元素排列成的矩形陣列。以下是一個由 6 個數(shù)字元素構(gòu)成的 2 行 3 列的矩陣:

 

矩陣屬于線性代數(shù)數(shù)學分支。線性代數(shù)是關(guān)于向量空間和線性映射的一個數(shù)學分支。它包括對線、面和子空間的研究,同時也涉及到所有的向量空間的一般性質(zhì)。表面上,排成矩形的數(shù)字就是個矩陣。實際,矩陣是有限維線性空間的線性變換的表示形式。它代表著空間到空間的映射。

二、 矩陣在現(xiàn)實應用場景

在程序中,配合矩陣模擬真實數(shù)據(jù),并可以實現(xiàn)如下功能:二維圖形變換、人臉變換、人臉識別、信息轉(zhuǎn)換等。比如一張圖片,簡單的黑白圖只有黑色和白色構(gòu)成,是不是可以有 1 0 兩個數(shù)值的二維矩陣來表示呢?自然,尤其在圖像處理里面,圖像信息是用二維矩陣數(shù)據(jù)。

矩陣分析,是一種方便的計算工具,可以以簡單的形式表達復雜的信息。

三、 矩陣表達式

我們選擇 Python 作為代碼演示案例。利用的是 NumPy 庫。什么是 NumPy?

NumPy 是一個基礎(chǔ)科學的計算包,包含:

  • 一個強大的N維數(shù)組對象
  • sophisticated (broadcasting) functions
  • tools for integrating C/C++ and Fortran code
  • 有用的線性代數(shù)、傅立葉轉(zhuǎn)換和隨機數(shù)生成函數(shù)

在代碼中,導入 numpy 函數(shù)。

比如下面展示 1 × 2 和 2 × 2 的矩陣。調(diào)用 shape 方法,可獲取矩陣的大小。同樣,numpy 方便了我們很多操作??梢灾苯觿?chuàng)建全 0 矩陣、全 1 矩陣和單元矩陣。代碼 matrix_exp.py 如下:

  1. # -*- coding: utf-8 -*- 
  2.  
  3. # 導入 numpy 函數(shù),以 np 開頭 
  4. import numpy as np 
  5.  
  6. if __name__ == '__main__'
  7.     mat1 = np.array([1, 3]) 
  8.     mat1 = np.mat(mat1)  # 相當于 np.mat([1,3]), mat 函數(shù)將目標數(shù)據(jù)的類型轉(zhuǎn)換為矩陣(matrix) 
  9.     print mat1 
  10.     # 1 行 2 列的矩陣(也稱 1 * 2 矩陣) 
  11.     # ==> [[1 3]] 
  12.  
  13.     print 
  14.  
  15.     mat2 = np.array([[1, 3], [3, 4]]) 
  16.     mat2 = np.mat(mat2) 
  17.     print mat2 
  18.     # 2 * 2 矩陣 
  19.     # ==> [[1 3] 
  20.     # ==>  [3 4]] 
  21.  
  22.     # 獲取矩陣的大小 
  23.     print mat1.shape 
  24.     print mat2.shape 
  25.  
  26.     print 
  27.  
  28.     mat3 = np.zeros((2, 3))  # 2 * 3 的全 0 矩陣 
  29.     mat4 = np.ones((3, 2))   # 3 * 2 的全 1 矩陣 
  30.     mat5 = np.identity(3)    # 3 * 3 的單元矩陣 
  31.     mat6 = np.eye(3, 3, 0)   # eye(N, M=None, k=0, dtype=float) 對角線是 1 其余值為 0 的矩陣, k 指定對角線的位置 
  32.     print mat3 
  33.     print mat4 
  34.     print mat5 
  35.     print mat6 

右鍵,Run 可得到下面結(jié)果:

  1. [[1 3]] 
  2. [[1 3] 
  3.  [3 4]] 
  4. (1, 2) 
  5. (2, 2) 
  6. [[ 0.  0.  0.] 
  7.  [ 0.  0.  0.]] 
  8. [[ 1.  1.] 
  9.  [ 1.  1.] 
  10.  [ 1.  1.]] 
  11. [[ 1.  0.  0.] 
  12.  [ 0.  1.  0.] 
  13.  [ 0.  0.  1.]] 
  14. [[ 1.  0.  0.] 
  15.  [ 0.  1.  0.] 
  16.  [ 0.  0.  1.]] 

如上注解詳細解釋了方法的使用。

「提示」代碼共享在 GitHub:https://github.com/JeffLi1993/robot-mumu

四、 矩陣運算

矩陣運算包括了加減乘除、轉(zhuǎn)置、逆矩陣、行列式、矩陣的冪、伴隨矩陣等。

矩陣加法、減法、數(shù)量乘法規(guī)則如下:(和向量的運算規(guī)則一樣)

  • -A = (-1)A
  • A - B = A + (-B)
  • 2A + 3B = (2A)+ (3B)

比如下面展示下 矩陣與矩陣相乘、矩陣求逆、轉(zhuǎn)置矩陣及每行或每列求和的運算。代碼 matrix_op.py 如下:

  1. # -*- coding: utf-8 -*- 
  2.  
  3. # 導入 numpy 函數(shù),以 np 開頭 
  4. import numpy as np 
  5.  
  6. if __name__ == '__main__'
  7.     # 矩陣相乘 
  8.     mat1 = np.mat([1, 3]) 
  9.     mat2 = np.mat([[3], [4]]) 
  10.     mat3 = mat1 * mat2 
  11.     print mat3 
  12.     # 1 * 2 矩陣乘以 2 * 1 矩陣,得到 1 * 1 矩陣 
  13.     # ==> [[15]] 
  14.  
  15.     print 
  16.  
  17.     # 矩陣求逆 
  18.     mat4 = np.mat([[1, 0, 1], [0, 2, 1], [1, 1, 1]]) 
  19.     mat5 = mat4.I  # I 對應 getI(self) ,返回可逆矩陣的逆 
  20.     print mat5 
  21.     # 矩陣的逆 
  22.     # ==> [[-1. -1.  2.] 
  23.     # ==>  [-1.  0.  1.] 
  24.     # ==>  [ 2.  1. -2.]] 
  25.  
  26.     print 
  27.  
  28.     # 轉(zhuǎn)置矩陣 
  29.     mat6 = np.mat([[1, 1, 1], [0, 2, 1], [1, 1, 1]]) 
  30.     mat7 = mat6.T  # I 對應 getT(self) ,返回矩陣的轉(zhuǎn)置矩陣 
  31.     print mat7 
  32.     # 矩陣的轉(zhuǎn)置矩陣 
  33.     # ==> [[1 0 1] 
  34.     # ==>  [1 2 1] 
  35.     # ==>  [1 1 1]] 
  36.  
  37.     print 
  38.  
  39.     # 矩陣每一列的和 
  40.     sum1 = mat6.sum(axis=0) 
  41.     print sum1 
  42.     # 矩陣每一行的和 
  43.     sum2 = mat6.sum(axis=1) 
  44.     print sum2 
  45.     # 矩陣所有行列的總和 
  46.     sum3 = sum(mat6[1, :]) 
  47.     print sum3 
  48.  
  49.     print 
  50.  
  51.     # 矩陣與數(shù)組之間的轉(zhuǎn)換 
  52.     mat8 = np.mat([[1, 2, 3]]) 
  53.     arr1 = np.array(mat8)  # 矩陣轉(zhuǎn)換成數(shù)組 
  54.     print arr1 
  55.     arr2 = [1, 2, 3] 
  56.     mat9 = np.mat(arr2)  # 數(shù)組轉(zhuǎn)換成矩陣 
  57.     print mat9 

右鍵,Run 可得到下面結(jié)果:

 

  1. [[15]]  
  2. [[-1. -1. 2.]  
  3. [-1. 0. 1.]  
  4. [ 2. 1. -2.]]  
  5. [[1 0 1]  
  6. [1 2 1]  
  7. [1 1 1]]  
  8. [[2 4 3]]  
  9. [[3]  
  10. [3]  
  11. [3]]  
  12. [[0 2 1]]  
  13. [[1 2 3]]  
  14. [[1 2 3]] 

五、 理解矩陣和向量乘法

從解多元方程組可以看出

【本文為51CTO專欄作者“李強強”的原創(chuàng)稿件,轉(zhuǎn)載請通過51CTO聯(lián)系作者獲取授權(quán)】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2014-07-09 09:29:34

機器學習

2020-10-13 14:38:50

機器學習數(shù)據(jù)

2014-07-15 09:36:55

機器學習

2014-07-04 10:05:57

機器學習

2017-02-27 14:24:12

機器學習深度學習數(shù)學

2014-07-01 09:30:54

機器學習

2018-08-05 06:48:34

2020-09-30 14:24:58

PythonSet對象

2021-02-06 23:00:39

機器學習工程人工智能

2021-12-06 20:23:40

機器學習數(shù)學

2017-09-04 22:41:31

深度學習矩陣運算代碼

2014-06-19 14:14:35

機器學習

2024-06-05 11:36:28

2024-08-23 09:06:35

機器學習混淆矩陣預測

2020-06-01 08:46:35

機器學習數(shù)學Python

2017-11-24 10:43:43

Madlib機器學習

2014-06-30 10:58:02

機器學習

2024-01-24 14:14:59

人工智能矩陣

2025-02-24 11:16:20

2023-10-09 13:35:00

AI機器學習
點贊
收藏

51CTO技術(shù)棧公眾號