在前述文章中,我们已经知道,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无法执行计算,放到最后以保证其行代码都可以被执行)
标签:python,矩阵,a1,b1,数组,print,array,乘法
From: https://blog.csdn.net/weixin_44855046/article/details/141597969