Python实现矩阵乘法

Python实现矩阵乘法欢迎点击 算法与编程之美 关注我们 本文首发于微信公众号 算法与编程之美 欢迎关注 及时了解更多此系列文章 问题描述矩阵相信大家都

问题

矩阵相信大家都知道,是线性代数中的知识,就是一系列数集。顾名思义,数字组成的矩形,例如:

[1 2 3 4

 5 67 8

 9 1011 ]

现在,我们需要用python编程来实现矩阵的乘法。

输入示例:

2 3 3 4

1 2 3

4 5 6

1 2 3 4

5 6 7 8

9 10 11 12

输出示例:

38 44 50 56

83 98 113 128

注意:输入的第一行分别为两个矩阵的行列数(表示为:N1,M1,N2,M2)。

方法

1.矩阵乘法原理

要做矩阵的乘法,首先得搞清楚几点关于矩阵乘法的知识。

只有一个矩阵的列数等于另一个矩阵的行数时,这两个矩阵才能相乘。

矩阵乘法的原理是,一个矩阵的每一行分别与另一个矩阵的每一列的每一个数一一对应相乘再相加,得到的数字就是结果矩阵的中的一个数。

结果矩阵的形状是一个矩阵的行数和另一个矩阵的列数。如A2*3 * B3*4 =C2*4.总结出来就是:‘中间相等,取两头’。

2.python实现矩阵乘法

知道了矩阵乘法的原理后,再一起来看看如何用python编写出程序吧。如何输入输出矩阵就不说了,直接看中间的算法。有以下几个步骤:

“定循环”。先根据乘法的原理,得出结果矩阵的形状,比如:A2*3 * B3*4 =C2*4,结果矩阵为2行4列,所以就一共有2*4个数字,也就是说程序需要循环2*4次。则循环可定为N1*M2.

“定因数”。每一次相乘时,两个因数都会改变,所以需要在循环开始出设置变量,这样每一次的变量都会更新。

“定结果”。在每一次循环时,需要算出一个结果,为了计算简便,可使用匿名函数lambda,其用法为lambdax:function,iterable.其中x为iterable的遍历。分别执行function。

3.代码示例

lis1,lis2 = [],[]

N1,M1,N2,M2 = map(int,input().split())

for i in range(N1):

     nums = list(map(int,input().split()))

     lis1.append(nums)

for i in range(N2):

     nums = list(map(int,input().split()))

     lis2.append(nums)

res = []

for a in range(N1):

     res.append([])

     for b in range(M2):

         lis4 = []

         lis3 = lis1[a]

         for c in range(N2):

            lis4.append(lis2[c][b])

         res_num = sum(map(lambda x,y:x*y,lis3,lis4))

         res[a].append(res_num)

for i in res:

     for o in i:

         print(o,end=’ ‘)

     print()

4.运行效果

Python实现矩阵乘法

图2.4.1 运行效果

结语

Python中很多东西常常与数学有关,要想做正确,还得究其原理。对于矩阵乘法,可以是说得非常详细了,甚至会显得有点啰嗦,但是,所体现的是对于一个问题的解题思路。关键在于解题的方法,是需要一步一步来看的。这才是本文所要告诉大家的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212463.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午7:59
下一篇 2026年3月18日 下午8:00


相关推荐

  • 一张图看懂 SQL 的各种 join 用法!

    一张图看懂 SQL 的各种 join 用法!具体分解如下 2 LEFTJOIN 左连接 3 RIGHTJOIN 右连接 4 OUTERJOIN 外连接 5 LEFTJOINEXCL 左连接 内连接 6 RIGHTJOINEXC 右连接 内连接 7 OUTERJOINEXC 外连接 内连接 关于 join 你学废了么 真诚地邀请您加入我们的大家庭 在这里不仅有技术知识分享 还有博主们之间的互帮互助不定期发红包

    2026年3月17日
    3
  • Nginx 配置 HTTPS 完整过程[通俗易懂]

    Nginx 配置 HTTPS 完整过程[通俗易懂]配置站点使用https,并且将http重定向至https。1.nginx的ssl模块安装查看nginx是否安装http_ssl_module模块。$/usr/local/nginx/sbin/nginx-V![在这里插入图片描述](https://img-blog.csdnimg.cn/2018112610054317.png)如果出现configure…

    2022年7月14日
    17
  • webstom 激活码2022【2022.01最新】2022.03.05

    (webstom 激活码2022)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html40ZKSWCX8G-eyJsaWNlbnNlSWQi…

    2022年4月2日
    126
  • vue和layUi对比

    vue和layUi对比vue和layUi对比vue(angular,react)这些框架会负责数据和视图的绑定,数据变了,视图自动更新,视图发生事件,也会更新数据,很省事。layui(bootstrap,extjs)这类库,感觉不是框架,而是组件库,会提供一些组件(比如表格,树),只提供外观和行为,不提供和数据的绑定,数据变了,你负责刷新;视图变了,你自己获取数据。vue的界面库elementui和layui都是组件库,区别就是数据和视图是不是关联的。layui其实更偏向与后端开发人员使用,在服务端页面上有非常好的效果

    2022年6月25日
    165
  • 求fragstats4.2教程

    求fragstats4.2教程有没有下伙伴给我发个免费的 Fragstats4 2 的中文教程 在下感激不尽

    2026年2月17日
    2
  • 项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

    项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

    2022年2月2日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号