
这里提供关于如何利用代码来执行矩阵运算的一个实例。更新时间2024年12月19日 08:30:30 作者这篇文章主要是向广大朋友介绍了关于如何去使用某种工具来进行矩阵运算的相关资料, Numpy是一种在编程语言里面存在的核心库, 它是专门用于去处理那些多维的数据以及进行矩阵相关的运算操作, 在这篇文章里是通过具体的代码例子来介绍的, 介绍得非常详细和深入, 有需要了解这方面的朋友可以过来参考查看。一、矩阵相乘这个行为。对于中矩阵相乘这一操作, 开发者可以选择使用numpy库来进行实现, 同时也能够选用sympy库来完成同样的任务。如果以采用numpy方法进行具体实施为例, 其所对应的代码内容展示如下:import numpy as npa01np.random.randint(10,size(4,3))print(a01)array([[6, 4, 9],[1, 4, 8],[8, 0, 0],[5, 6, 8]])a02np.random.randint(10,size(3,4))print(a02)array([[5, 7, 7, 9],[6, 4, 6, 2],[5, 2, 8, 2]])a03np.dot(a01,a02)print(a03)array([[ 99, 76, 138, 80],[ 69, 39, 95, 33],[ 40, 56, 56, 72],[101, 75, 135, 73]])也有可能对乘积进行转换, 将其改写为分数的形式, 具体的示例代码如下所示:import numpy as npfrom fractions import Fractiona01np.random.randint(10,size(4,3)).astype(float)a01[0,0]0.5print(a01)array([[0.5, 4. , 3. ],[0. , 4. , 4. ],[4. , 3. , 6. ],[0. , 2. , 6. ]])a02np.random.randint(10,size(3,4))print(a02)array([[5, 7, 7, 9],[6, 4, 6, 2],[5, 2, 8, 2]])a03np.dot(a01,a02)print(a03)#a03为小数形式array([[41.5, 25.5, 51.5, 18.5],[44. , 24. , 56. , 16. ],[68. , 52. , 94. , 54. ],[42. , 20. , 60. , 16. ]])a04np.vectorize(lambda x: Fraction.from_float(x).limit_denominator())(a03)print(a04)#a04为分数形式array([[Fraction(83, 2), Fraction(51, 2), Fraction(103, 2), Fraction(37, 2)],[Fraction(44, 1), Fraction(24, 1), Fraction(56, 1), Fraction(16, 1)],[Fraction(68, 1), Fraction(52, 1), Fraction(94, 1), Fraction(54, 1)],[Fraction(42, 1), Fraction(20, 1), Fraction(60, 1), Fraction(16, 1)]], dtypeobject)二、对矩阵进行求逆的操作。我们可以选择使用numpy库来进行实现, 同时也可以选择使用sympy库来进行代码编写工作, 具体的程序代码如下:import numpy as npfrom fractions import Fraction#numpy实现a01np.random.randint(5,size(2,2))print(a01)array([[4, 0],[3, 4]])a02 np.linalg.inv(a01.astype(float))#求逆矩阵print(a02)array([[ 0.25 , 0. ],[-0.1875, 0.25 ]])a03np.vectorize(lambda x: Fraction.from_float(x).limit_denominator())(a02)print(a03)#分数形式array([[Fraction(1, 4), Fraction(0, 1)],[Fraction(-3, 16), Fraction(1, 4)]], dtypeobject)#sympy实现a04Matrix([[4,0],[3,4]])print(a04)Matrix([[4, 0],[3, 4]])print(a04.inv())Matrix([[ 1/4, 0],[-3/16, 1/4]])通过分析最终的求解结果可以发现一个事实, 就是在处理数据时, sympy这个工具会自动地将给出的结果变换为最为简洁的呈现形式, 一旦涉及到的结果类型属于分数的那一种类别, 那么它就会坚持地使用分数的具体形态来进行表示, 从整体上的展示效果这一维度来开展分析工作, 其表现情况是明显要优于numpy的。三、对于矩阵特征值与特征向量的求解这一任务, 我们可以进行具体的分析与处理。我们可以选择使用numpy库来进行实现, 同时也可以选择使用sympy库来进行代码编写工作, 具体的程序代码如下:import numpy as npfrom sympy import Matrix#numpy实现a01np.array([[-1,2,0],[0,3,0],[2,1,-1]])print(a01)array([[-1, 2, 0],[ 0, 3, 0],[ 2, 1, -1]])eigenvalue, featurevector np.linalg.eig(a01)print(eigenvalue)array([-1., -1., 3.])print(featurevector)array([[ 0.00000000e00, 1.11022302e-16, 4.08248290e-01],[ 0.00000000e00, 0.00000000e00, 8.16496581e-01],[ 1.00000000e00, -1.00000000e00, 4.08248290e-01]])#sympy实现a02Matrix([[-1,2,0],[0,3,0],[2,1,-1]])print(a02)Matrix([[-1, 2, 0],[ 0, 3, 0],[ 2, 1, -1]])print(a02.eigenvals()){3: 1, -1: 2}#3: 1意为特征值为3个数为1个-1: 2意为特征值为-1个数为2个print(a02.eigenvects())[(-1, 2, [Matrix([[0],[0],[1]])]), (3, 1, [Matrix([[1],[2],[1]])])]从求解结果来看的话, sympy这个工具给出的求解结果, 相比起numpy所给出的求解结果而言, 显得要更加直观一些。四、矩阵约当标准型与转换矩阵求解用numpy来解矩阵的约当标准型还有那个转换矩阵的话, 操作起来是比较麻烦的。所以, 我们这里选择使用sympy这个工具来进行计算。具体的代码实现如下所示:from sympy import Matrixa01Matrix([[-1,2,0],[0,3,0],[2,1,-1]])print(a01)Matrix([[-1, 2, 0],[ 0, 3, 0],[ 2, 1, -1]])p_mat,j_mata01.jordan_form()#p_mat为转换矩阵j_mat为约当标准型print(p_mat)Matrix([[0, 1, 1],[0, 0, 2],[2, 0, 1]])print(j_mat)Matrix([[-1, 1, 0],[ 0, -1, 0],[ 0, 0, 3]])你要注意, 在用sympy这个工具去算约当标准型的时候, 它会把数字1放在上三角的位置, 但是, 在一些别的数学书里, 它们却是把数字1放在下三角的位置。五、矩阵奇异值分解sympy不直接支持矩阵奇异值的求解, 因此, 我们使用numpy来进行求解, 具体的代码如下:import numpy as npa02np.array([[4,0],[3,0],[0,0]])print(a02)array([[4, 0],[3, 0],[0, 0]])U, S, Vt np.linalg.svd(a02)print(U)#左奇异向量组成的酉矩阵array([[-0.8, -0.6, 0. ],[-0.6, 0.8, 0. ],[ 0. , 0. , 1. ]])print(S)#奇异值array([5., 0.])print(Vt)#右奇异向量组成的酉矩阵array([[-1., -0.],[ 0., 1.]])构成酉矩阵的那个奇异向量, 它并不是唯一的这样一个状态。六、矩阵方程组求解采用sympy进行求解操作, 具体的代码内容展示在下文之中:from sympy import Matrix, symbols, linsolveA Matrix([[2,3,1],[4,2,3], [7,1,-1]])print(A)Matrix([[2, 3, 1],[4, 2, 3],[7, 1, -1]])B Matrix([[4],[17],[1]])print(B)Matrix([[ 4],[17],[ 1]])x, y, z symbols(x y z)resultlinsolve((A,B),x,y,z)print(result){(1, -1, 5)}A Matrix([[1,1,1,1],[4,3,5,-1], [2,1,3,-3]])print(A)Matrix([[1, 1, 1, 1],[4, 3, 5, -1],[2, 1, 3, -3]])B Matrix([[-1],[-1],[1]])print(B)Matrix([[-1],[-1],[ 1]])x, y, z symbols(x y z)resultlinsolve((A,B),x,y,z)print(result){(2 - 2*z, z - 3, z)}通过观察示例代码就能发现,sympy有能力去解那种参数矩阵属于非奇异的情况下的方程组, 同样也能去处理参数矩阵处于奇异状态之中的方程组问题, 而且它还会给你提供对应的通解信息。总结关于利用进行矩阵运算的文章, 介绍到这里就结束。希望读者能搜索我以前的文章, 或继续浏览下面的相关文章, 多多支持csdn