Python基于NumPy模块的矩阵运算 |
您所在的位置:网站首页 › python的sum函数怎么用 › Python基于NumPy模块的矩阵运算 |
「由于微信公众号改变了推送规则,为了每次新的推送可以在第一时间出现在您的订阅列表中,记得将本公众号设为星标或置顶喔~」 NumPy 是基于 c 语言而编写的一个开源的 Python 科学计算库,使用 NumPy,就可以很自然地使用数组和矩阵,其存储效率和输入输出性能远远优于 Python 中等价的基本数据结构,同样的数值计算任务,使用 NumPy 要比直接编写 Python 代码便捷得多。NumPy 包含了很多很实用的 NumPy 数学函数,涵盖线性代数、傅里叶变换等功能,因此 NumPy 深受许多开发者的喜爱。 本文根据 Python 的 NumPy 模块,整理了一些常见的矩阵操作。本文所有代码都是基于import numpy as np导入了 numpy 语句而书写。 1 定义矩阵 直接创建矩阵创建一个矩阵可以直接对列表对象转化,也可以对字符串对象进行转化(G 格式和 matlab 一致) 列表转化为矩阵 # 创建一维行向量 a = np.array([1, 2, 3])# 创建二维矩阵 b = np.array([[1, 2, 3], [4, 5, 6]]) print("a:", a) print("b:", b) 输出结果: 字符串转矩阵 # 像matlab那样不同行用分号隔开b1 = np.mat("1 2 3;4 5 6;7 8 9")print("b1:", b1)输出结果: 利用函数创建矩阵NumPy 提供有很方便创建全 0 矩阵、单位矩阵、随机矩阵的函数。 创建全 0 矩阵 c = np.zeros((3, 3))print("c:", c)输出结果: 创建单位矩阵 d = np.eye(3)print("d:", d)输出结果: 创建全 1 矩阵 e = np.ones((3, 3))print("e:", e)输出结果: 创建指定大小的随机矩阵(int 类型) # (初始值,结束值,大小)f = np.random.randint(1, 10, (2, 3))print("f:", f)输出结果: 创建指定大小的随机矩阵 g = np.random.random((3, 3))print("g:", g)输出结果: 2 矩阵运算 矩阵元素的加减乘除这里要注意的是矩阵之间直接使用四则运算符号+ - * /代表的是两个矩阵对应元素的四则运算,所以传入的矩阵一定要大小相等。我们可以使用a.shape查看矩阵的大小。 h = np.array([[1, 2, 3], [4, 5, 6]])g = np.array([[7, 8, 9], [10, 11, 12]])print("h+g:", h + g) # 加print("h-g:", h - g) # 减print("h*g:", h * g) # 乘print("h/g:", h / g) # 除输出结果: 矩阵的转置 h = np.array([[1, 2, 3], [4, 5, 6]])print("h的转置", h.T)输出结果: 矩阵的点乘这里介绍了三种矩阵点乘的方式,实际编程中我们只需要选择掌握一种即可。 h = np.array([[1, 2, 3], [4, 5, 6]])g = np.array([[7, 8, 9], [10, 11, 12]])print("h点乘(g的转置)", np.dot(h, g.T))print("h点乘(g的转置)", h.dot(g.T))print("h点乘(g的转置)", np.matmul(h, g.T))输出结果: 矩阵的数乘 h = np.array([1, 1, 3])print("矩阵数乘:", h * 3)输出结果: 矩阵的范数 i = np.array([0, 1, -1])print("L^2-范数", np.linalg.norm(i, 2))print("L^5-范数", np.linalg.norm(i, 5))print("L^10-范数", np.linalg.norm(i, 10))输出结果: 矩阵内积 j = np.array([0, 1, -1])k = np.array([1, 0, 1])print("j与k的内积:", np.inner(j, k))输出结果: 矩阵求逆 l = np.random.randint(1, 10, (3, 3))print("l:", l)print("l的逆:", np.linalg.inv(l))输出结果: 矩阵求特征值使用eigvals函数可以获取矩阵的特征值,使用eig函数可以获取矩阵的特征值和特征向量,其返回的是一个二元组,第0个元素是特征值,第1个元素是特征向量。 m = np.mat("3 -2;1 0")print("m的特征值:", np.linalg.eigvals(m))# eig求特征值与特征向量,返回元组m_tem1, m_tem2 = np.linalg.eig(m)print("m的特征向量:",m_tem2)输出结果: 计算行列式计算矩阵行列式时,要注意矩阵是否是方阵。 n = np.random.randint(1, 10, (2, 2))print("n:", n)print("n的行列式:", np.linalg.det(n))输出结果: 3 其他常用函数 计算算数平均值 o = np.array([[1, 2, 3], [4, 5, 6]])print("o的平均值:", np.mean(o))输出结果: 计算方差 p = np.array([[1, 2, 3], [4, 5, 6]])print("p的方差:", np.var(p))输出结果: 获取最大值最小值NumPy 提供有最大值最小值获取函数,可以很方便的获取一个矩阵的最值,从而便于进行区间中点的计算等操作。 p = np.array([[1, 2, 3], [4, 5, 6]])print("最大值", np.min(p))print("最小值", np.max(p))输出结果: 矩阵的垂直与水平组合使用 vstack 函数可以将两个数组进行垂直方向的合并,使用 hstack 函数可以将两个数组进行水平方向的合并。 q = np.array([[1, 2], [3, 4]])r = np.array([[5, 6], [7, 8]])print("垂直组合:", np.vstack((q, r)))print("水平组合:", np.hstack((q, r)))输出结果: 4.小结NumPy 模块的内容不仅仅局限于此,想要了解更过的 numpy 模块使用知识,请参考NumPy 参考手册 | NumPy同时也欢迎读者的宝贵建议与支持! 「本公众号的原创成果,在未经允许的情况下,请勿用于任何商业用途!」 「您的点赞、收藏与关注是我创作的最大动力!」 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |