机器学习的数学 之python矩阵运算

开发 开发工具
矩阵属于线性代数数学分支。线性代数是关于向量空间和线性映射的一个数学分支。它包括对线、面和子空间的研究,同时也涉及到所有的向量空间的一般性质。

[[188138]]

本文提纲

1. 什么是矩阵

2. 矩阵在现实应用场景

3. 矩阵表示

4. 矩阵运算

5. 理解矩阵乘法

一、 什么是矩阵

一个 m × n 的矩阵是一个由 m 行 n 列元素排列成的矩形阵列。以下是一个由 6 个数字元素构成的 2 行 3 列的矩阵:

 

矩阵属于线性代数数学分支。线性代数是关于向量空间和线性映射的一个数学分支。它包括对线、面和子空间的研究,同时也涉及到所有的向量空间的一般性质。表面上,排成矩形的数字就是个矩阵。实际,矩阵是有限维线性空间的线性变换的表示形式。它代表着空间到空间的映射。

二、 矩阵在现实应用场景

在程序中,配合矩阵模拟真实数据,并可以实现如下功能:二维图形变换、人脸变换、人脸识别、信息转换等。比如一张图片,简单的黑白图只有黑色和白色构成,是不是可以有 1 0 两个数值的二维矩阵来表示呢?自然,尤其在图像处理里面,图像信息是用二维矩阵数据。

矩阵分析,是一种方便的计算工具,可以以简单的形式表达复杂的信息。

三、 矩阵表达式

我们选择 Python 作为代码演示案例。利用的是 NumPy 库。什么是 NumPy?

NumPy 是一个基础科学的计算包,包含:

  • 一个强大的N维数组对象
  • sophisticated (broadcasting) functions
  • tools for integrating C/C++ and Fortran code
  • 有用的线性代数、傅立叶转换和随机数生成函数

在代码中,导入 numpy 函数。

比如下面展示 1 × 2 和 2 × 2 的矩阵。调用 shape 方法,可获取矩阵的大小。同样,numpy 方便了我们很多操作。可以直接创建全 0 矩阵、全 1 矩阵和单元矩阵。代码 matrix_exp.py 如下:

  1. # -*- coding: utf-8 -*- 
  2.  
  3. # 导入 numpy 函数,以 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 函数将目标数据的类型转换为矩阵(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 可得到下面结果:

  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

四、 矩阵运算

矩阵运算包括了加减乘除、转置、逆矩阵、行列式、矩阵的幂、伴随矩阵等。

矩阵加法、减法、数量乘法规则如下:(和向量的运算规则一样)

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

比如下面展示下 矩阵与矩阵相乘、矩阵求逆、转置矩阵及每行或每列求和的运算。代码 matrix_op.py 如下:

  1. # -*- coding: utf-8 -*- 
  2.  
  3. # 导入 numpy 函数,以 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.     # 转置矩阵 
  29.     mat6 = np.mat([[1, 1, 1], [0, 2, 1], [1, 1, 1]]) 
  30.     mat7 = mat6.T  # I 对应 getT(self) ,返回矩阵的转置矩阵 
  31.     print mat7 
  32.     # 矩阵的转置矩阵 
  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.     # 矩阵与数组之间的转换 
  52.     mat8 = np.mat([[1, 2, 3]]) 
  53.     arr1 = np.array(mat8)  # 矩阵转换成数组 
  54.     print arr1 
  55.     arr2 = [1, 2, 3] 
  56.     mat9 = np.mat(arr2)  # 数组转换成矩阵 
  57.     print mat9 

右键,Run 可得到下面结果:

 

  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专栏作者“李强强”的原创稿件,转载请通过51CTO联系作者获取授权】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2014-07-09 09:29:34

机器学习

2020-10-13 14:38:50

机器学习数据

2014-07-04 10:05:57

机器学习

2014-07-15 09:36:55

机器学习

2017-02-27 14:24:12

机器学习深度学习数学

2018-08-05 06:48:34

2014-07-01 09:30:54

机器学习

2020-09-30 14:24:58

PythonSet对象

2021-02-06 23:00:39

机器学习工程人工智能

2021-12-06 20:23:40

机器学习数学

2017-09-04 22:41:31

深度学习矩阵运算代码

2014-06-19 14:14:35

机器学习

2020-06-01 08:46:35

机器学习数学Python

2014-06-30 10:58:02

机器学习

2024-01-24 14:14:59

人工智能矩阵

2017-11-24 10:43:43

Madlib机器学习

2016-11-03 09:19:04

Python机器学习库

2017-09-06 08:49:33

机器学习数学公式代数

2023-10-09 13:35:00

AI机器学习

2020-09-10 11:20:37

Python机器学习人工智能
点赞
收藏

51CTO技术栈公众号