除法|python矩阵基本运算

前述文章中,我们已经初步学习了矩阵形数组(以下简称为“矩阵”)加减法和乘法运算,本次讨论除法运算。

未来得及一起学习的同学可以参考以下链接:

加减法| python矩阵运算(学习笔记一)-CSDN博客

乘法|python矩阵基本运算(学习笔记二)-CSDN博客

【1】array矩阵除法

按照先前学习惯例,先完成矩阵定义。此处以使用array模块定义3X3矩阵为例:

import numpy as np #引入numpy模块
a=np.array([[1,2,3],[4,5,6],[7,8,9]]) #使用array子模块定义3X3矩阵
b=np.array([[2,4,6],[8,10,12],[14,16,18]]) #使用array子模块定义3X3矩阵
c=a/b #两个array子模块定义的3X3矩阵直接相除
print('a/b=\n',c) #输出结果,\n用于换行

运行上述代码,输出结果为:

图1

可见,对array模块定义的矩阵,用“/”执行的除法操作,其实是同位置数据的彼此相除。

【2】matrix矩阵除法

参照前述内容,此处以使用matrix模块定义3X3矩阵为例:

d=np.matrix('1,2,3;4,5,6;7,8,9') #使用matrix子模块定义3X3矩阵
e=np.matrix('2,4,6;8,10,12;14,16,18') #使用matrix子模块定义3X3矩阵
f=d/e #两个matrix子模块定义的3X3矩阵直接相除,"/"为除法算符
g=np.divide(d,e) #两个matrix子模块定义的3X3矩阵直接相除,"np.divide()"为除法算符
print('d/e=\n',f) #输出结果,\n用于换行
print('np.divide(d,e)=\n',g) #输出结果,\n用于换行

运行上述代码,输出结果为:

图2

可见,对matrix模块定义的矩阵,用

“/”和 np.divide()

执行的除法操作,其实是同位置数据的彼此相除。

【3】逆矩阵

从线性代数我们知道,矩阵不直接计算除法,而是使用求逆矩阵的形式计算两个矩阵的“商”。

查询numpy官网,numpy模块使用numpy.linalg.inv模块进行逆矩阵求解,链接如下;

https://numpy.org/doc/stable/reference/generated/numpy.linalg.inv.html#numpy.linalg.inv

此外,官网教程贴心示例,用“@”作为矩阵乘法计算符。

图3

基于此,我们尝试重新定义矩阵,并寻求输出逆矩阵。

【3.1】array模块求解逆矩阵

首先使用array模块定义矩阵并求其逆矩阵,输入以下代码:

import numpy as np #引入numpy模块
from numpy.linalg import inv #引入inv逆矩阵求解模块
a=np.array([[1,2,7],[5,6,8],[9,10,2]]) #使用array子模块定义3X3矩阵
b=np.array([[2,5,6],[8,7,12],[14,15,18]]) #使用array子模块定义3X3矩阵
c=inv(a) #矩阵a的逆矩阵
d=inv(b) #矩阵b的逆矩阵
print('矩阵a的逆矩阵为:\n',c) #输出结果,\n用于换行
print('矩阵b的逆矩阵为:\n',d) #输出结果,\n用于换行

获得运行结果如下:

图4

虽然上述结果已出,但仍需十分小心,我们反过来让两个矩阵做一下乘法运算:

e=a*c #“ * ”作乘法计算符的结果
f=b*d #“ * ”作乘法计算符
e1=a@c #“@”作乘法计算符
f1=b@d #“@”作乘法计算符
print('a*c=\n',e) #“ * ”作乘法计算符的结果,\n表示换行
print('b*d=\n',f) #“ * ”作乘法计算符的结果,\n表示换行
print('a@c=\n',e1) #“ @ ”作乘法计算符的结果,\n表示换行
print('b@d=\n',f1) #“ @ ”作乘法计算符的结果,\n表示换行

获得结果如下:

图5

由图可见:

【a】“ * ”作乘法计算符的结果是,同一位置的数据彼此相乘;

【b】“@”作乘法计算符的结果是,两个矩阵按行列相乘后叠加。

【3.2】matrix模块求解逆矩阵

直接使用matrix模块定义矩阵并求其逆矩阵,输入以下代码:

aa=np.matrix('1,2,7;5,6,8;9,10,2') #使用matrix子模块定义3X3矩阵
bb=np.matrix('2,5,6;8,7,12;14,15,18') #使用matrix子模块定义3X3矩阵
cc=inv(aa) #矩阵a的逆矩阵
dd=inv(bb) #矩阵b的逆矩阵
print('矩阵aa的逆矩阵为:\n',cc) #输出结果,\n用于换行
print('矩阵bb的逆矩阵为:\n',dd) #输出结果,\n用于换行

获得如下结果:

图6

如图6所示,逆矩阵结果与图4完全一致。

继续让两个矩阵做一下乘法运算:

ee=aa*cc #“ * ”作乘法计算符
ff=bb*dd #“ * ”作乘法计算符
ee1=aa@cc #“@”作乘法计算符
ff1=bb@dd #“@”作乘法计算符
print('aa*cc=\n',ee) #“ * ”作乘法计算符的结果,\n表示换行
print('bb*dd=\n',ff) #“ * ”作乘法计算符的结果,\n表示换行
print('aa@cc=\n',ee1) #“ @ ”作乘法计算符的结果,\n表示换行
print('bb@dd=\n',ff1) #“ @ ”作乘法计算符的结果,\n表示换行

获得如下结果:

图7

由图7可知:用“ * ”或者“@”作乘法计算符的结果一样,两个矩阵按行列相乘后叠加。

附完整版代码如下:

import numpy as np #引入numpy模块
from numpy.linalg import inv #引入inv逆矩阵求解模块
a=np.array([[1,2,7],[5,6,8],[9,10,2]]) #使用array子模块定义3X3矩阵
b=np.array([[2,5,6],[8,7,12],[14,15,18]]) #使用array子模块定义3X3矩阵
c=inv(a) #矩阵a的逆矩阵
d=inv(b) #矩阵b的逆矩阵
print('矩阵a的逆矩阵为:\n',c) #输出结果,\n用于换行
print('矩阵b的逆矩阵为:\n',d) #输出结果,\n用于换行
e=a*c #“ * ”作乘法计算符
f=b*d #“ * ”作乘法计算符
e1=a@c #“@”作乘法计算符
f1=b@d #“@”作乘法计算符
print('a*c=\n',e) #“ * ”作乘法计算符的结果,\n表示换行
print('b*d=\n',f) #“ * ”作乘法计算符的结果,\n表示换行
print('a@c=\n',e1) #“ @ ”作乘法计算符的结果,\n表示换行
print('b@d=\n',f1) #“ @ ”作乘法计算符的结果,\n表示换行

aa=np.matrix('1,2,7;5,6,8;9,10,2') #使用matrix子模块定义3X3矩阵
bb=np.matrix('2,5,6;8,7,12;14,15,18') #使用matrix子模块定义3X3矩阵
cc=inv(aa) #矩阵a的逆矩阵
dd=inv(bb) #矩阵b的逆矩阵
print('矩阵aa的逆矩阵为:\n',cc) #输出结果,\n用于换行
print('矩阵bb的逆矩阵为:\n',dd) #输出结果,\n用于换行
ee=aa*cc #“ * ”作乘法计算符
ff=bb*dd #“ * ”作乘法计算符
ee1=aa@cc #“@”作乘法计算符
ff1=bb@dd #“@”作乘法计算符
print('aa*cc=\n',ee) #“ * ”作乘法计算符的结果,\n表示换行
print('bb*dd=\n',ff) #“ * ”作乘法计算符的结果,\n表示换行
print('aa@cc=\n',ee1) #“ @ ”作乘法计算符的结果,\n表示换行
print('bb@dd=\n',ff1) #“ @ ”作乘法计算符的结果,\n表示换行

【4】其他乘除法运算模块讨论

大家在阅读代码的时候,经常会看到使用multiply()和devide()进行乘除法计算,官网说明可参考链接:

https://numpy.org/doc/stable/reference/generated/numpy.multiply.html

https://numpy.org/doc/stable/reference/generated/numpy.divide.html

【4.1】array模块乘法运算符对比

此处我们直接定义矩阵,通过输出结果测试这两个模块的输出结果。首先输入以下代码:

import numpy as np #引入numpy模块
from numpy.linalg import inv #引入inv逆矩阵求解模块
from numpy.ma.core import multiply

a=np.array([[1,2,7],[5,6,8],[9,10,2]]) #使用array子模块定义3X3矩阵
b=np.array([[2,5,6],[8,7,12],[14,15,18]]) #使用array子模块定义3X3矩阵
c=a*b #“ * ”作乘法计算符
d=a@b #“@”作乘法计算符
e=np.multiply(a,b) #“np.multiply”作乘法计算符
print('a*b=\n',c) #输出结果,\n用于换行
print('a@b=\n',d) #输出结果,\n用于换行
print('np.multiply(a,b)=\n',e) #输出结果,\n用于换行

获得如下结果:

图8

由图8可见:

【a】“ * ”和“multiply”作乘法计算符的结果是,同一位置的数据彼此相乘;

【b】“@”作乘法计算符的结果是,两个矩阵按行列相乘后叠加。

【4.2】matrix模块乘法运算符对比

继续输入以下代码:

aa=np.matrix('1,2,7;5,6,8;9,10,2') #使用matrix子模块定义3X3矩阵
bb=np.matrix('2,5,6;8,7,12;14,15,18') #使用matrix子模块定义3X3矩阵
cc=aa*bb #“ * ”作乘法计算符
dd=aa@bb #“@”作乘法计算符
ee=np.multiply(aa,bb) #“np.multiply”作乘法计算符
print('aa*bb=\n',cc) #输出结果,\n用于换行
print('aa@bb=\n',dd) #输出结果,\n用于换行
print('np.multiply(aa,bb)=\n',ee) #输出结果,\n用于换行

获得结果如下:

图8

由图8可见:

a“ * ”和“@”作乘法计算符的结果是,两个矩阵按行列相乘后叠加;

【b】“multiply”作乘法计算符的结果是,同一位置的数据彼此相乘。

【4.3】array模块除法运算符对比

继续输入以下代码:

#array定义矩阵除法运算符测试
f=a/b  #“ / ”作乘法计算符
g=np.divide(a,b)  #“ divide ”作乘法计算符
print('a/b=\n',f) #输出结果,\n用于换行
print('np.divide(a,b)=\n',g) #输出结果,\n用于换行

获得结果如下:

图9

由图9可见:对于array模块定义矩阵,“ / ”和“devide”作除法计算符的结果一致,同一位置的数据彼此相除。

【4.4】matrix模块除法运算符对比

继续输入以下代码:

#matrix定义矩阵除法运算符测试
ff=aa/bb  #“ / ”作乘法计算符
gg=np.divide(aa,bb)  #“ divide ”作乘法计算符
print('aa/bb=\n',ff) #输出结果,\n用于换行
print('np.divide(aa,bb)=\n',gg) #输出结果,\n用于换行

获得结果如下:

图10

由图9可见:对于matrix模块定义矩阵,“ / ”和“devide”作除法计算符的结果一致,同一位置的数据彼此相除。

至此,大家进行矩阵的乘除法运算时,一定要谨慎使用计算符,以免出错。

【5】总结

综上所述,获得以下结论:

【a】在numpy模块中使用numpy.linalg.inv子模块,可进行逆矩阵求解;

【b】对array模块定义的矩阵,“ * ”作乘法计算符的结果是,同一位置的数据彼此相乘;“@”作乘法计算符的结果是,两个矩阵按行列相乘后叠加。

【c】对matrix模块定义的矩阵,“ * ”和“@”作乘法计算符的结果是,两个矩阵按行列相乘后叠加;“multiply”作乘法计算符的结果是,同一位置的数据彼此相乘。

【d】对于array模块定义矩阵,“ / ”和“devide”作除法计算符的结果一致,同一位置的数据彼此相除。

【e】对于matrix模块定义矩阵,“ / ”和“devide”作除法计算符的结果一致,同一位置的数据彼此相除。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值