利用python进行矩阵运算实例代码

 更新时间:2024年12月19日 08:30:30   作者:weixin_46846685  
这篇文章主要给大家介绍了关于如何利用python进行矩阵运算的相关资料,Numpy是Python编程语言中的一个核心库,专门用于处理多维数据和矩阵运算,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、矩阵相乘

python中矩阵相乘可以使用numpy实现,也可以使用sympy实现,以numpy实现为例,代码如下:

import numpy as np

a01=np.random.randint(10,size=(4,3))
print(a01)
array([[6, 4, 9],
       [1, 4, 8],
       [8, 0, 0],
       [5, 6, 8]])
a02=np.random.randint(10,size=(3,4))
print(a02)
array([[5, 7, 7, 9],
       [6, 4, 6, 2],
       [5, 2, 8, 2]])

a03=np.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 np
from fractions import Fraction

a01=np.random.randint(10,size=(4,3)).astype(float)
a01[0,0]=0.5
print(a01)
array([[0.5, 4. , 3. ],
       [0. , 4. , 4. ],
       [4. , 3. , 6. ],
       [0. , 2. , 6. ]])
a02=np.random.randint(10,size=(3,4))
print(a02)
array([[5, 7, 7, 9],
       [6, 4, 6, 2],
       [5, 2, 8, 2]])

a03=np.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. ]])

a04=np.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)]], dtype=object)

二、矩阵求逆

分别使用numpy和sympy实现,代码如下:

import numpy as np
from fractions import Fraction

#numpy实现
a01=np.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  ]])

a03=np.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)]], dtype=object)

#sympy实现
a04=Matrix([[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 np
from sympy import Matrix

#numpy实现
a01=np.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.00000000e+00,  1.11022302e-16,  4.08248290e-01],
       [ 0.00000000e+00,  0.00000000e+00,  8.16496581e-01],
       [ 1.00000000e+00, -1.00000000e+00,  4.08248290e-01]])

#sympy实现
a02=Matrix([[-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 Matrix

a01=Matrix([[-1,2,0],[0,3,0],[2,1,-1]])
print(a01)
Matrix([
[-1, 2,  0],
[ 0, 3,  0],
[ 2, 1, -1]])
p_mat,j_mat=a01.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 np

a02=np.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, linsolve

A = 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')
result=linsolve((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')
result=linsolve((A,B),x,y,z)
print(result)
{(2 - 2*z, z - 3, z)}

从示例代码可看出,sympy可以解参数矩阵非奇异时的方程组,也可以解参数矩阵奇异时的方程组,并且给出通解。

总结

到此这篇关于利用python进行矩阵运算的文章就介绍到这了,更多相关python矩阵运算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决Python print 输出文本显示 gbk 编码错误问题

    解决Python print 输出文本显示 gbk 编码错误问题

    这篇文章主要介绍了解决Python print 输出文本显示 gbk 编码错误问题,本文给出了三种解决方法,需要的朋友可以参考下
    2018-07-07
  • 详解django.contirb.auth-认证

    详解django.contirb.auth-认证

    这篇文章主要介绍了详解django.contirb.auth-认证,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Python OpenCV图像指定区域裁剪的实现

    Python OpenCV图像指定区域裁剪的实现

    这篇文章主要介绍了Python OpenCV图像指定区域裁剪的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • OpenCV实现机器人对物体进行移动跟随的方法实例

    OpenCV实现机器人对物体进行移动跟随的方法实例

    这篇文章主要给大家介绍了关于OpenCV实现机器人对物体进行移动跟随的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python爬虫实例爬取网站搞笑段子

    Python爬虫实例爬取网站搞笑段子

    这篇文章主要介绍了Python爬虫实例爬取网站搞笑段子,具有一定参考价值,看完了代码不妨看看段子,希望大家每天开心。
    2017-11-11
  • python的endswith()的使用方法及实例

    python的endswith()的使用方法及实例

    这篇文章主要介绍了python的endswith()的使用方法及实例,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • 使用python实现抓取腾讯视频所有电影的爬虫

    使用python实现抓取腾讯视频所有电影的爬虫

    这篇文章主要介绍了使用python实现抓取腾讯视频所有电影的爬虫,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • tensorflow 限制显存大小的实现

    tensorflow 限制显存大小的实现

    今天小编就为大家分享一篇tensorflow 限制显存大小的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python+Pygame实现经典魂斗罗游戏

    Python+Pygame实现经典魂斗罗游戏

    《魂斗罗》(Contra)是由Konami于1987年推出的一系列卷轴射击类单机游戏。本文将利用Python中的Pygame库实现这一经典游戏,感兴趣的可以了解一下
    2022-05-05
  • 通过Plotly实现交互式数据可视化的流程步骤

    通过Plotly实现交互式数据可视化的流程步骤

    在数据科学和数据分析领域,数据可视化是一种非常重要的技术,Plotly 是一个功能强大的 Python 可视化库,它可以帮助我们创建交互式的数据可视化图表,本文将介绍如何使用 Plotly 实现交互式数据可视化,需要的朋友可以参考下
    2024-05-05

最新评论