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

矩阵属于线性代数数学分支。线性代数是关于向量空间和线性映射的一个数学分支。它包括对线、面和子空间的研究,同时也涉及到所有的向量空间的一般性质。 2017-04-11 12:05:07 机器学习python矩阵运算 JS中的二进制操作简介 现今世界上几乎所有的计算机体系结构都是以字节(byte)为二进制数据的基本单位(注:不是说最小单位),所以二进制常常以字节数组的形式存在于程序当中。例如在C#里面,就用byte[],标准C里面没有byte类型,但可以通过typedef把byte定义为unsigned char的别名,效果是一样的。

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

[[188138]]

本文提纲

1. 什么是矩阵

2. 矩阵在现实应用场景

3. 矩阵表示

4. 矩阵运算

5. 理解矩阵乘法

一、 什么是矩阵

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

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

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

二、 矩阵在现实应用场景

在程序中,配合矩阵模拟真实数据,并可以实现如下功能:二维图形变换、人脸变换、人脸识别、信息转换等。比如一张图片,简单的黑白图只有黑色和白色构成,是不是可以有 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. #导入numpy函数,以np开头
  3. importnumpyasnp
  4. if__name__=='__main__':
  5. mat1=np.array([1,3])
  6. mat1=np.mat(mat1)#相当于np.mat([1,3]),mat函数将目标数据的类型转换为矩阵(matrix)
  7. printmat1
  8. #1行2列的矩阵(也称1*2矩阵)
  9. #==>[[13]]
  10. print
  11. mat2=np.array([[1,3],[3,4]])
  12. mat2=np.mat(mat2)
  13. printmat2
  14. #2*2矩阵
  15. #==>[[13]
  16. #==>[34]]
  17. #获取矩阵的大小
  18. printmat1.shape
  19. printmat2.shape
  20. print
  21. mat3=np.zeros((2,3))#2*3的全0矩阵
  22. mat4=np.ones((3,2))#3*2的全1矩阵
  23. mat5=np.identity(3)#3*3的单元矩阵
  24. mat6=np.eye(3,3,0)#eye(N,M=None,k=0,dtype=float)对角线是1其余值为0的矩阵,k指定对角线的位置
  25. printmat3
  26. printmat4
  27. printmat5
  28. printmat6

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

  1. [[13]]
  2. [[13]
  3. [34]]
  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. #导入numpy函数,以np开头
  3. importnumpyasnp
  4. if__name__=='__main__':
  5. #矩阵相乘
  6. mat1=np.mat([1,3])
  7. mat2=np.mat([[3],[4]])
  8. mat3=mat1*mat2
  9. printmat3
  10. #1*2矩阵乘以2*1矩阵,得到1*1矩阵
  11. #==>[[15]]
  12. print
  13. #矩阵求逆
  14. mat4=np.mat([[1,0,1],[0,2,1],[1,1,1]])
  15. mat5=mat4.I#I对应getI(self),返回可逆矩阵的逆
  16. printmat5
  17. #矩阵的逆
  18. #==>[[-1.-1.2.]
  19. #==>[-1.0.1.]
  20. #==>[2.1.-2.]]
  21. print
  22. #转置矩阵
  23. mat6=np.mat([[1,1,1],[0,2,1],[1,1,1]])
  24. mat7=mat6.T#I对应getT(self),返回矩阵的转置矩阵
  25. printmat7
  26. #矩阵的转置矩阵
  27. #==>[[101]
  28. #==>[121]
  29. #==>[111]]
  30. print
  31. #矩阵每一列的和
  32. sum1=mat6.sum(axis=0)
  33. printsum1
  34. #矩阵每一行的和
  35. sum2=mat6.sum(axis=1)
  36. printsum2
  37. #矩阵所有行列的总和
  38. sum3=sum(mat6[1,:])
  39. printsum3
  40. print
  41. #矩阵与数组之间的转换
  42. mat8=np.mat([[1,2,3]])
  43. arr1=np.array(mat8)#矩阵转换成数组
  44. printarr1
  45. arr2=[1,2,3]
  46. mat9=np.mat(arr2)#数组转换成矩阵
  47. printmat9

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

  1. [[15]]
  2. [[-1.-1.2.]
  3. [-1.0.1.]
  4. [2.1.-2.]]
  5. [[101]
  6. [121]
  7. [111]]
  8. [[243]]
  9. [[3]
  10. [3]
  11. [3]]
  12. [[021]]
  13. [[123]]
  14. [[123]]

五、 理解矩阵和向量乘法

从解多元方程组可以看出

【本文为清一色专栏作者“李强强”的原创稿件,转载请通过清一色联系作者获取授权】

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

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月4日 22:41
下一篇 2023年5月4日 22:41

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信