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

在前述文章中,我们已经知道,python通过使用numpy模块,创建矩阵形数组至少可以采用两种方法。也即,通过array和matrix子模块分别创建,详情请参考以下链接。https://blog.csdn.net/weixin_44855046/article/details/141564179?spm=1001.2014.3001.5502

进一步,上述链接指向文章也通过测试发现: 通过array和matrix子模块分别创建的矩阵形数组,加减法的运算结果一致。

本文继续探索,力求发现乘法运算结果是否一致。

按照先前学习内容,先完成数组定义。此处以定义3X3矩阵形数组为例:

#引入numpy模块
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]]) #使用array子模块定义第一个3X3矩阵型数组
b=np.array([[3,2,1],[6,5,4],[9,8,7]]) #使用array子模块定义第二个3X3矩阵型数组

c=np.matrix([[1,2,3],[4,5,6],[7,8,9]]) #使用matrix子模块定义第一个3X3矩阵型数组
d=np.matrix([[3,2,1],[6,5,4],[9,8,7]]) #使用matrix子模块定义第一个3X3矩阵型数组

使用print()输出结果:

print("a=",a) #("a="会被原样输出,仅用于显示是哪个运算结果)
print("b=",b) #("b="会被原样输出,仅用于显示是哪个运算结果)
print("c=",c) #("c="会被原样输出,仅用于显示是哪个运算结果)
print("d=",d) #("d="会被原样输出,仅用于显示是哪个运算结果)

pycharm运行程序,获得结果如图:

如图所示, array定义的矩阵形数组a和b,和matrix定义的矩阵型数组c和d,分别相等:

a=c,b=d

在此基础上,尝试进行乘法计算:

【1】乘法测试:

print(a*b,'=a*b') #('=a*b'会被原样输出,仅用于显示是哪个运算结果)
print(c*d,'=c*d') #('=a*b'会被原样输出,仅用于显示是哪个运算结果)

pycharm乘法测试结果:区别显著

分析上述数据,可以发现:

【a】a*b的计算结果是对位相乘,即同一位置的数据相乘,非矩阵乘法结果。

【b】c*d的计算结果是行列相乘,即c行*b列然后结果叠加,是矩阵乘法结果。

为进一步验证上述发现,尝试把矩阵形数组转换为行列数不同的形式,继续定义数组如下:

a1=np.array([[1,2],[4,5],[7,8]]) #使用array子模块定义第一个3X2矩阵型数组
b1=np.array([[3,2,1],[6,5,4]]) #使用array子模块定义第二个2X3矩阵型数组

c1=np.matrix([[1,2],[4,5],[7,8]]) #使用matrix子模块定义第一个3X2矩阵型数组
d1=np.matrix([[3,2,1],[6,5,4]]) #使用matrix子模块定义第一个2X3矩阵型数组

print("a1=",a1) #("a1="会被原样输出,仅用于显示是哪个运算结果)
print("b1=",b1) #("b1="会被原样输出,仅用于显示是哪个运算结果)
print("c1=",c1) #("c1="会被原样输出,仅用于显示是哪个运算结果)
print("d1=",d1) #("d1="会被原样输出,仅用于显示是哪个运算结果)

pycharm运行程序,获得结果如图,两种方式的结果是一样的:

在此基础上,尝试进行乘法计算。

【2】乘法测试(行列式不同):

输入以下代码:

print(a1*b1,'=a1*b1') #('=a1*b1'会被原样输出,仅用于显示是哪个运算结果)
print(c1*d1,'=c1*d1') #('=a1*b1'会被原样输出,仅用于显示是哪个运算结果)

 pycharm运行程序,获得结果如图,a1和b1因为行列数不一致,无法计算。(a1是3行2列,b1是2行3列)

这一步的计算结果验证了【1】中【a】条发现:array定义的数组,乘法计算法则是同一位置上的数据相乘,当数据的行列不一样,同一位置的条件不能满足,因此计算无法执行。

由于计算止步于print(a1*b1,'=a1*b1'),将这一行代码变成注释,使程序执行后续代码:

#print(a1*b1,'=a1*b1') #('=a1*b1'会被原样输出,仅用于显示是哪个运算结果)
print(c1*d1,'=c1*d1') #('=a1*b1'会被原样输出,仅用于显示是哪个运算结果)

pycharm运行程序,获得结果如图:

如图所示,2行3列的a1和3行2列的b1按照矩阵乘法原则输出了结果。这一步的计算结果验证了【1】中【b】条发现:matrix定义的数组,计算结果是行列相乘。

 因此,在实际项目开发过程中,如果使用到矩阵形数组乘法,应注意合理使用array和matrix子模块。

综上所述,有以下收获:

【a】array和matrix子模块对矩阵形数组的乘法计算结果不同;

【b】array模块定义数组相乘时,要求两个数组的行列数完全一致,同一位置的数据相乘;

【c】matrix模块定义的数组执行矩阵乘法运算法则,即前矩阵形数组的行列数分别对应后矩阵形数组的列行数,两个矩阵的行列分别相乘后叠加。

附完整版代码如下:

#引入numpy模块
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]]) #使用array子模块定义第一个3X3矩阵型数组
b=np.array([[3,2,1],[6,5,4],[9,8,7]]) #使用array子模块定义第二个3X3矩阵型数组

c=np.matrix([[1,2,3],[4,5,6],[7,8,9]]) #使用matrix子模块定义第一个3X3矩阵型数组
d=np.matrix([[3,2,1],[6,5,4],[9,8,7]]) #使用matrix子模块定义第一个3X3矩阵型数组

# 在print中插入"a="或者'=a*b',它们都会被原样输出,仅用于显示运算结果来源
print("a=",a) #("a="会被原样输出,仅用于显示是哪个运算结果)
print("b=",b) #("b="会被原样输出,仅用于显示是哪个运算结果)
print("c=",c) #("c="会被原样输出,仅用于显示是哪个运算结果)
print("d=",d) #("d="会被原样输出,仅用于显示是哪个运算结果)
print(a*b,'=a*b') #('=a*b'会被原样输出,仅用于显示是哪个运算结果)
print(c*d,'=c*d') #('=a*b'会被原样输出,仅用于显示是哪个运算结果)

a1=np.array([[1,2],[4,5],[7,8]]) #使用array子模块定义第一个3X2矩阵型数组
b1=np.array([[3,2,1],[6,5,4]]) #使用array子模块定义第二个2X3矩阵型数组

c1=np.matrix([[1,2],[4,5],[7,8]]) #使用matrix子模块定义第一个3X2矩阵型数组
d1=np.matrix([[3,2,1],[6,5,4]]) #使用matrix子模块定义第一个2X3矩阵型数组

print("a1=",a1) #("a1="会被原样输出,仅用于显示是哪个运算结果)
print("b1=",b1) #("b1="会被原样输出,仅用于显示是哪个运算结果)
print("c1=",c1) #("c1="会被原样输出,仅用于显示是哪个运算结果)
print("d1=",d1) #("d1="会被原样输出,仅用于显示是哪个运算结果)

#print(a1*b1,'=a1*b1') #('=a1*b1'会被原样输出,仅用于显示是哪个运算结果)
print(c1*d1,'=c1*d1') #('=a1*b1'会被原样输出,仅用于显示是哪个运算结果)
print(a1*b1,'=a1*b1') #('=a1*b1'会被原样输出,仅用于显示是哪个运算结果,a1*b1无法执行计算,放到最后以保证其行代码都可以被执行)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值