首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-03-07 13:22
  • 3255
  • 9369
blog.csdn.net

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

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

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

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

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

使用print()输出结果:

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

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

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

a=c,b=d

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

【1】乘法测试:

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

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

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

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

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

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

  1. a1=np.array([[1,2],[4,5],[7,8]]) #使用array子模块定义第一个3X2矩阵型数组
  2. b1=np.array([[3,2,1],[6,5,4]]) #使用array子模块定义第二个2X3矩阵型数组
  3. c1=np.matrix([[1,2],[4,5],[7,8]]) #使用matrix子模块定义第一个3X2矩阵型数组
  4. d1=np.matrix([[3,2,1],[6,5,4]]) #使用matrix子模块定义第一个2X3矩阵型数组
  5. print("a1=",a1) #("a1="会被原样输出,仅用于显示是哪个运算结果)
  6. print("b1=",b1) #("b1="会被原样输出,仅用于显示是哪个运算结果)
  7. print("c1=",c1) #("c1="会被原样输出,仅用于显示是哪个运算结果)
  8. print("d1=",d1) #("d1="会被原样输出,仅用于显示是哪个运算结果)

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

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

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

输入以下代码:

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

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

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

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

  1. #print(a1*b1,'=a1*b1') #('=a1*b1'会被原样输出,仅用于显示是哪个运算结果)
  2. 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模块定义的数组执行矩阵乘法运算法则,即前矩阵形数组的行列数分别对应后矩阵形数组的列行数,两个矩阵的行列分别相乘后叠加。

附完整版代码如下:

  1. #引入numpy模块
  2. import numpy as np
  3. a=np.array([[1,2,3],[4,5,6],[7,8,9]]) #使用array子模块定义第一个3X3矩阵型数组
  4. b=np.array([[3,2,1],[6,5,4],[9,8,7]]) #使用array子模块定义第二个3X3矩阵型数组
  5. c=np.matrix([[1,2,3],[4,5,6],[7,8,9]]) #使用matrix子模块定义第一个3X3矩阵型数组
  6. d=np.matrix([[3,2,1],[6,5,4],[9,8,7]]) #使用matrix子模块定义第一个3X3矩阵型数组
  7. # 在print中插入"a="或者'=a*b',它们都会被原样输出,仅用于显示运算结果来源
  8. print("a=",a) #("a="会被原样输出,仅用于显示是哪个运算结果)
  9. print("b=",b) #("b="会被原样输出,仅用于显示是哪个运算结果)
  10. print("c=",c) #("c="会被原样输出,仅用于显示是哪个运算结果)
  11. print("d=",d) #("d="会被原样输出,仅用于显示是哪个运算结果)
  12. print(a*b,'=a*b') #('=a*b'会被原样输出,仅用于显示是哪个运算结果)
  13. print(c*d,'=c*d') #('=a*b'会被原样输出,仅用于显示是哪个运算结果)
  14. a1=np.array([[1,2],[4,5],[7,8]]) #使用array子模块定义第一个3X2矩阵型数组
  15. b1=np.array([[3,2,1],[6,5,4]]) #使用array子模块定义第二个2X3矩阵型数组
  16. c1=np.matrix([[1,2],[4,5],[7,8]]) #使用matrix子模块定义第一个3X2矩阵型数组
  17. d1=np.matrix([[3,2,1],[6,5,4]]) #使用matrix子模块定义第一个2X3矩阵型数组
  18. print("a1=",a1) #("a1="会被原样输出,仅用于显示是哪个运算结果)
  19. print("b1=",b1) #("b1="会被原样输出,仅用于显示是哪个运算结果)
  20. print("c1=",c1) #("c1="会被原样输出,仅用于显示是哪个运算结果)
  21. print("d1=",d1) #("d1="会被原样输出,仅用于显示是哪个运算结果)
  22. #print(a1*b1,'=a1*b1') #('=a1*b1'会被原样输出,仅用于显示是哪个运算结果)
  23. print(c1*d1,'=c1*d1') #('=a1*b1'会被原样输出,仅用于显示是哪个运算结果)
  24. print(a1*b1,'=a1*b1') #('=a1*b1'会被原样输出,仅用于显示是哪个运算结果,a1*b1无法执行计算,放到最后以保证其行代码都可以被执行)

注:本文转载自blog.csdn.net的西猫雷婶的文章"https://blog.csdn.net/weixin_44855046/article/details/141597969"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top