第 109 天:NumPy 矩阵

机器学习中会用到大量的数学操作,而 Numpy 计算库使这些操作变得简单,这其中就涉及到了 Numpy 的矩阵操作,下面我们就来一起学习如何在 Numpy 科学计算库中进行矩阵的一些基本运算。

1 矩阵的定义

定义矩阵使用 Numpy 科学计算库中的 mat 函数,如下所示:

numpy.mat(data, dtype=None)

  • data,表示矩阵的数据。
  • dtype,表示矩阵中的数据类型,默认是浮点数。

应用示例:

# (1) 定义一个3 X 3的矩阵,数据类型为 intimport numpy as npdata = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]A = np.mat(data, int)print(A, type(A))
# 输出结果:#[[1 2 3]# [4 5 6]# [7 8 9]] <class 'numpy.matrix'>
# (2) 定义一个3 X 3的矩阵,矩阵元素全为0,数据类型为 intimport numpy as npA = np.mat(np.zeros((3, 3)), int)print(A)
# 输出结果:#[[0 0 0]# [0 0 0]# [0 0 0]]
# (3) 定义一个3 X 3的矩阵,矩阵元素全为1import numpy as npA = np.mat(np.ones((3, 3)))print(A)
# 输出结果:#[[1. 1. 1.]# [1. 1. 1.]# [1. 1. 1.]]
# (4) 定义一个3 X 3的单位矩阵import numpy as npA = np.mat(np.eye(3, 3), int)print(A)
# 输出结果:#[[1 0 0]# [0 1 0]# [0 0 1]]
# (5) 定义一个3 X 3的对角矩阵,主对角线之外的元素皆为0import numpy as npA = np.mat(np.diag([1, 2, 3]), int)print(A)
# 输出结果:#[[1 0 0]# [0 2 0]# [0 0 3]]
# (6) 定义一个3 X 3的矩阵,把100作为所有元素初始值import numpy as npA = np.mat(np.full((3, 3), 100), int)print(A)
# 输出结果:#[[100 100 100]# [100 100 100]# [100 100 100]]

2 矩阵的线性代数运算

2.1 矩阵的加法与减法

只有两个矩阵的行数和列数相等时,才可以进行矩阵的加法和减法运算,否则程序会抛出 ValueError 异常。

应用示例:

# 定义两个矩阵 A 和 B,分别进行矩阵的加法和减法运算import numpy as npA = np.mat(np.full((3, 3), 100), int)B = np.mat(np.full((3, 3), 200), int)print(A+B)print(A-B)
# 输出结果:#[[300 300 300]# [300 300 300]# [300 300 300]]#[[-100 -100 -100]# [-100 -100 -100]# [-100 -100 -100]]

2.2 矩阵的数乘

某个实数乘以矩阵称作矩阵的数乘。

应用示例:

# 定义矩阵 A 和浮点数 a,进行矩阵的数乘运算import numpy as npa = 0.1A = np.mat(np.full((3, 3), 100), int)print(a*A)
# 输出结果:#[[10. 10. 10.]# [10. 10. 10.]# [10. 10. 10.]]

2.3 矩阵的点乘

只有在第一个矩阵的列数与第二个矩阵的行数相等时,两个矩阵才能相乘,否则程序会抛出 ValueError 异常。

应用示例:

# 定义矩阵 A 和矩阵 B,进行矩阵的乘法运算import numpy as npA = np.mat(np.full((2, 3), 10), int)B = np.mat(np.full((3, 3), 10), int)print(A*B) # 求矩阵相乘形式一print(A.dot(B)) # 求矩阵相乘形式二print(np.dot(A, B)) # 求矩阵相乘形式三
# 输出结果:#[[300 300 300]# [300 300 300]]#[[300 300 300]# [300 300 300]]

2.4 矩阵的转置

把矩阵的每一行转换为列,称为矩阵的转置。

应用示例:

# 定义矩阵 A,进行矩阵转置运算import numpy as npdata = [[1,2,3],[4,5,6],[7,8,9]]A = np.mat(data, int)print(A.T)
# 输出结果:#[[1 4 7]# [2 5 8]# [3 6 9]]

2.5 矩阵的求逆

非奇异矩阵下,可以对矩阵进行求逆运算。(非奇异矩阵就是行列式不为 0 的矩阵)

应用示例:

# 定义矩阵 A,进行矩阵求逆运算import numpy as npdata = [[1, 2], [3, 4]]A = np.mat(data, int)print(A.I)
# 输出结果:#[[-2. 1. ]# [ 1.5 -0.5]]

2.6 矩阵的行列式

对于矩阵 A,均可对应一个标量 det(A),它的值将告诉我们矩阵是否为非奇异的。

应用示例:

# 求矩阵 A 的行列式 det(A)import numpy as npA = np.mat([[1, 2],[3, 4]], int)det = np.linalg.det(A)print(det)
# 输出结果:# -2.0000000000000004

计算结果不等于-2,是因为浮点数运算存在精度损失。

2.7 矩阵的秩

如果把矩阵看成一个向量组,那么秩就是线性无关向量的个数,也就是向量组的维度,概念比较复杂,有兴趣的读者可以继续探索。矩阵的秩应该是小于等于行数与列数的最小值。

# 求矩阵 A 的秩 rank(A)import numpy as npA = np.mat([[1, 2],[3, 4]], int)rank = np.linalg.matrix_rank(A)print(rank)
# 输出结果:# 2

2.8 矩阵特征值和特征向量

A 为 n 阶矩阵,若数 λ 和 n 维非0列向量 x 满足 Ax=λx,那么数 λ 称为 A 的特征值,x 称为 A 的对应于特征值 λ的特征向量。

应用示例:

# 求矩阵 A 的特征值和其对应的特征向量import numpy as npA = np.mat([[1, 2],[3, 4]], int)value, vector = np.linalg.eig(A)print(value)print(vector)
# 输出结果:#[-0.37228132 5.37228132]#[[-0.82456484 -0.41597356]# [ 0.56576746 -0.90937671]]

2.9 矩阵的线性方程解

求解形如 Ax = b 的线性方程组,其中 A 为矩阵,b 为一维或二维的数组,x 是未知变量。

应用举例:

# 求解如下线性方程组的解:# x + y + z = 3# 3x + y + 4z = 8# 8x + 9y + 5z = 22import numpy as npA = np.mat([[1, 1, 1], [3, 1, 4], [8, 9, 5]], int)b = np.mat([[3], [8], [22]], int)x = np.linalg.solve(A,b)print(x)
# 输出结果:#[[1.]# [1.]# [1.]]

总结

本节给大家介绍了 Python 中 Numpy 科学计算库中矩阵的基本使用方法,助你掌握机器学习中有关矩阵的一些基本运算。

参考资料

[1] https://www.runoob.com/numpy/numpy-matrix.html

[2] https://www.runoob.com/numpy/numpy-linear-algebra.html

示例代码:Python-100-days

系列文章

第108天:Python 操作 CSV

第107天:Python 解析 PDF

第106天:机器学习概览
第105天:Python 操作 Word
第104天:Python 操作 XML
第103天:Python 操作 Excel
第102天:Python aiohttp
第101天:Python asyncio
从 0 学习 Python 0 - 100 大合集总结
(0)

相关推荐

  • Python numpy中矩阵的基本用法汇总

    Python矩阵的基本用法 mat()函数将目标数据的类型转化成矩阵(matrix) 1,mat()函数和array()函数的区别 Numpy函数库中存在两种不同的数据类型(矩阵matrix和数组ar ...

  • 3段极简代码带你入门Python科学计算库SciPy

    大数据DT 提供大数据.AI等领域干货学习资源的「宝藏号」,跟50万技术人共同成长,一起玩转大数据.Python.数据分析.数据科学.人工智能!还会有各种好玩又奇葩的数据解读,边学习边吃瓜! 510篇 ...

  • 第 110 天:Numpy 中数组和矩阵的区别

    不知道你是否跟我有同样的疑惑,就是 Numpy 科学计算库中既可以创建数组,也可以创建矩阵,这两者究竟有哪些相似与不同之处呢?下面我们一起来解开这个疑惑. 1 创建方式 我们先来看一下三个例子. 应用 ...

  • Python数据分析库-Numpy中矩阵的点积与乘法

    各位客官姥爷好,欢迎回来.上节我们了解了numpy中数组用法,听说numpy也可以创建矩阵,那我们这节来试试吧. 01  矩阵的用法 1. 创建矩阵的方法 #np.mat方法支持以下三种用法a = n ...

  • 如何使用解决方案选择矩阵?

    当出现诸如客户不满意,市场份额下降,质量低下等问题时,你必须了解问题的根本原因.根本原因分析是使公司能够做出正确更改以防止故障反复发生的重要步骤,有3种处理重复出现的问题的方法,我们可以: 1.别理他 ...

  • 什么是Numpy?与Pandas的差异!

    Pandas和Numpy想必大家都听说过,一个是数值计算的扩展包,一个是做数据处理的,那么它们之间有何区别呢?我们通过这篇文章来看看吧. 什么是Numpy? Numpy系统是Python的一种开源的数 ...

  • 109岁老太太的长寿秘诀“多喝粥,少碰男人”!答案令人意外

    健康长寿是每个人都追求的事,都希望能够长命百岁,但是有多少人能够做到这样呢,大部分人在年轻的时候,身体的状况就不太好,经常出现问题,自然不会长寿.不过前一段时间,有位国外的长寿老人火了,原因是因为她的 ...

  • 矩阵互动!2021年世茂品牌广告!

    2999元中国尊 中国顶尖极端资料智库 购买之日起算 一年半 18月 超长长长长长服务期 并送 前面40个月中国尊大案 惊天300兆 矩阵互动 世茂品牌 长三角 2020+2021新媒体推广方案 极致 ...

  • 【109】首届“感恩父母 让爱传承”全国散文、诗歌有奖征文大赛程小丽作品

    我的母亲 程小丽(陕西) "有妈在,家就在"每逢节假日,我们都回家看望母亲.母亲虽已年迈,体弱多病,但日夜操劳已成为习惯. 一.多灾多难的童年 我的母亲出生在贫苦农民家庭.然而在母 ...

  • 什么是教练技术?131页五维教练领导力手册,五维教练领导力矩阵

    五维教练领导力手册 目录 1.什么是教练技术 2.五维教练领导力矩阵 领导者没有做,不能做事的时候,除了目标不明确,重要的是在面对现实的时候缺乏内在的动力.在面对困难和障碍的时候,领导者情绪和动力会下 ...