python矩阵相乘例题_百道Python入门级练习题(新手友好)第一回合——矩阵乘法...

题目描述

【问题描述】

编写程序,完成3*4矩阵和4*3整数矩阵的乘法,输出结果矩阵。

【输入形式】

一行,供24个整数。以先行后列顺序输入第一个矩阵,而后输入第二个矩阵。

【输出形式】

先行后列顺序输出结果矩阵,每个元素的显示宽度为8格,屏幕一行只显示矩阵的一行。

【样例输入】

1 2 3 4 5 6 7 8 9 1 2 3 9 8 7 6 5 4 3 2 1 1 2 3

上面的输入,意味着要计算如下两个矩阵的乘积。

第一个矩阵 :

1 2 3 4

5 6 7 8

9 1 2 3

第二个矩阵:

9 8 7

6 5 4

3 2 1

1 2 3

【样例输出】

左侧的1,2,3不是程序输出的内容。

34 32 30

110 100 90

96 87 78

123

知识点

输入一组整数

矩阵的输入

矩阵乘法

矩阵的输出

输出的值占8格

步骤1:输入一组整数

line = input().split()

nums = []

for s in line:

nums.append(int(s))

print(nums)12345

对以上代码,说明如下:

1. 第1行,input()读入整行,split()以空格为分隔符把整行分割成多段,生成数字字符串列表line。

2. 第2行,nums变量用来存储整数列表,初始化为空列表。

3. 第3,4行,for循环的作用是遍历数字字符串列表line内的每个元素s,把这个元素s转换为整数后,加到nums列表尾部。

4. 第5行,打印nums列表的值,可以帮助检查是否输入成功。

步骤2:生成两个相乘的矩阵

步骤2是把步骤1接收到的整数分装到两个矩阵内。

#1.1 第1个矩阵

mtx1 = []

for r in range(3):

row = []

for c in range(4):

row.append(nums[r * 4 + c])

mtx1.append(row)

print(mtx1)

#第二个矩阵

mtx2 = []

start = 3 * 4 #起点下标

for r in range(4):

row = []

for c in range(3):

row.append(nums[start + r * 3 + c])

mtx2.append(row)

print(mtx2)123456789101112131415161718

对于以上代码,解释如下:

1. 第2行,mtx1用来记住第一个矩阵。它是3行4列的矩阵。它的初值是空列表。

2. 第3行到第7行,是一个for循环。每循环一次,得到矩阵的一行。row变量用来记住这一行。

3. 第4行,row变量初始化为空列表。

4. 第5,6行,是一个for循环。每循环一次,就往row列表中加入一个整数。循环4次,就生成了一行。

5. 第7行,把矩阵的一行加到mtx1的尾部。mtx1是以列表作为元素的列表,也即矩阵。

6. 第9行开始,生成第二个矩阵mtx2。生成第二个矩阵的做法与生成第一个矩阵的做法是类似的。不同点有两处。第一处是,矩阵的元素来自nums列表中start位置及其后的元素。第二处不同是,第二个矩阵是4行3列的。

7. print(mtx1)和print(mtx2)这两条语句用于打印两个矩阵的值,帮助检查是否正确生成了两个矩阵。不过,矩阵的元素在屏幕上没有分行显示,而是显示在同一行。

步骤3:矩阵相乘

3行4列的矩阵乘以4行3列的矩阵,结果是3行3列的矩阵。你事先要熟悉矩阵的乘法。

以下代码的思路是,依次求出3行3列矩阵的每一个元素的值。

#矩阵乘法

result = []

for r in range(3):

row = []

for c in range(3):

v = mtx1[r][0] * mtx2[0][c] + mtx1[r][1] * mtx2[1][c] + mtx1[r][2] * mtx2[2][c] + mtx1[r][3] * mtx2[3][c]

row.append(v)

result.append(row)12345678

对于以上代码,说明如下:

1. result用来存储3行3列的矩阵。

2. 第2行到第7行构成一条for循环语句。一共循环3次。每循环一次,求出result矩阵的一行。

3. 第3行,row变量用来存储矩阵的一行。初值设为空列表。

4. 第4行到第6行构成一条for循环语句。这是内循环。一共循环3次。每循环一次,求出第r行(r从0开始编号)中的一个元素的值。v变量记住这个值。第6行把v变量加到row列表尾部。

5. 第7行,row加到result矩阵尾部,成为新的一行。

步骤4:输出矩阵

输出矩阵要满足两个要求:

1. 分成3行。

2. 每一行的每个元素占8格。

代码是:

for r in range(3):

print(str(result[r][0]).rjust(8) + str(result[r][1]).rjust(8) + str(result[r][2]).rjust(8))12

对以上代码说明如下:

1. for循环一共执行3次。每一次,输出矩阵的一行。

2. str(result[r][0]).rjust(8)的作用是,首先把元素result[r][0]转换为字符串形式的值,然后调用字符串的rjust方法,使得字符串长度不足8格的话,左侧填充空格。假设,result[r][0]值是34,那么输出的时候,左侧将填充6个空格,形成有8个字符的字符串,即“======34”。这里,=代表的是空格。

完整的代码

#矩阵乘法

#1. 输入

line = input().split()

nums = []

for s in line:

nums.append(int(s))

print(nums)

#1.1 第1个矩阵

mtx1 = []

for r in range(3):

row = []

for c in range(4):

row.append(nums[r * 4 + c])

mtx1.append(row)

print(mtx1)

#第二个矩阵

mtx2 = []

start = 3 * 4 #起点下标

for r in range(4):

row = []

for c in range(3):

row.append(nums[start + r * 3 + c])

mtx2.append(row)

print(mtx2)

#矩阵乘法

result = []

for r in range(3):

row = []

for c in range(3):

v = mtx1[r][0] * mtx2[0][c] + mtx1[r][1] * mtx2[1][c] + mtx1[r][2] * mtx2[2][c] + mtx1[r][3] * mtx2[3][c]

row.append(v)

result.append(row)

#输出结果矩阵

for r in range(3):

print(str(result[r][0]).rjust(8) + str(result[r][1]).rjust(8) + str(result[r][2]).rjust(8))12345678910111213141516171819202122232425262728293031323334353637383940

小结

分步骤解题,每步达成一个小目标。

每一步的末尾,打印输出中间结果,有利于验证代码是否正确。

不熟悉的话,多读几遍,自己默写几遍,就会成为你的代码。Python学习资料或者需要代码、视频加这个群吧548加上377还有875 都在这里了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔记本屏幕30hz_你真的了解笔记本电池和电源适配器吗?

很多笔记本硬件配置相似,但续航或性能却相差一大截。实际上,笔记本的续航能力在很大程度上取决于电池;而实际性能,则还会受到电源适配器功率的影响。想认识这两个硬件,就需要从它们的基本参数谈起。笔记本电池笔记本的…

java 俄文,俄文字体在word里面是什么

在Word里输入俄语字母,一打字字体就变成宋体了,俄语字母间间距...我不知道你这个俄语输入法补丁的字库用的是什么,如果是汉字库里好像就没办法调了,试一下把字体改成西文的Times New Roman、Arial等字体看有没有变化,如果没有,那就…

excel公式不自动计算_【纯干货】值得收藏的Excel日期计算公式!

点击上面“零壹快学”关注我们小伙伴们好,今天零壹学长给大家整理了一些常用的日期计算公式,赶紧往下看吧!01根据身份证号计算出生年月--TEXT(MID(A2,7,8),"0-00-00")02根据身份证号提取性别IF(MOD(MID(A2,15,3),2),"男"…

php xml 添加节点 出问题,PHP往XML中添加节点的方法

本文实例讲述了PHP往XML中添加节点的方法。分享给大家供大家参考。具体方法如下:1. contacts.xml代码复制代码 代码如下:JJJManagerNational1971-12-222. php代码复制代码 代码如下:$tel_node null;$doc xmldocfile (contacts.xml);$contact_node $doc->root …

项目开发流程_绿维文旅:旅游项目开发模式与流程

一、旅游项目开发模式旅游综合开发是立足旅游项目自有资源基础,以旅游产业为主导,以市场为导向,以资本为驱动,以资源整合为核心,通过集中土地、资本、技术、交通、劳动力等生产要素,推进土地开发、交通建设…

java创建一个成员方法吗,java构造方法和成员方法的区别

构造方法和成员方法的区别1.构造方法构造方法作用概述给对象的数据进行初始化构造方法格式方法名与类名相同没有返回值类型,连void都没有没有具体的返回值构造方法注意事项如果你不提供构造方法,系统会给出默认构造方法如果你提供了构造方法,…

Java继承_java练习本(20190617)

公众号回复“1”,小刀拉你进学习交流群哟,妈妈再也不担心我学习没人陪伴啦~昨日翻译昨日翻译“The journey of a thousand miles begins with one step.”——Lao Tzu“千里之行始于足下。”——老子今日名言“Imagination was given to man to compensa…

爬虫 页面元素变化_爬虫 基本知识 萌新

爬虫定义网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引…

php 巧用逻辑运算符,php的神奇逻辑运算符

(小乖)今天再读php文档,看到逻辑运算符这边又发现了新天地呀,之前在探究c语言的逻辑运算符中,我们得到了一些结论而在php中,&& ||与and or 同时存在,并且表示的含义是一样,但是不同的是优先级接下来…

gateway sentinel 熔断 不起作用_Sentinel 1.8.0 年度版本发布,熔断降级重构升级

简介:在经过数月的打磨后,Sentinel 1.8.0 版本正式发布!该版本是本年度最重要的版本之一,包含大量特性改进与 bug 修复,尤其是针对熔断降级特性的完善升级(支持任意统计时长、慢调用比例降级策略、熔断器事…

python的getattr和setattr_getattr函数和setattr函数

python内置的两个看起来很简单,一般也不怎么用得上的函数,getattr函数和setattr函数。getattr函数用于获取对象的某个属性的值,setattr函数用于设置对象的某个属性值。getattr函数获取对象的某个属性值,如果属性不存在&#xff0c…

php mongodb排序查询,Mongodb 如何按照内嵌文档的某个字段排序?

现有数据如下{"_id" : ObjectId("5992c90beeb45634df1c2be4"),"name" : "测试数据1","status" : {"product" : [{"id" : ObjectId("59a37f7aef887a1d58b59f4f"),"sort" : 2},{&quo…

access设置0字段为null是因为类型转换失败_Apache Pulsar 2.6.1 版本正式发布:2.6.0 加强版,新增 OAuth2 支持

在 Apache Pulsar 2.6.0 版本发布后的 2 个月,2020 年 8 月 21 日,Apache Pulsar 2.6.1 版本正式发布!Apache Pulsar 2.6.1 修复了 2.6.0 版本中的诸多问题,改进了一些功能,新增了对 OAuth2 的支持,覆盖 Br…

英特尔显卡linux管理_英特尔 11 代酷睿大揭秘:这次全是大招

英特尔在今年九月份正式推出了第 11 代酷睿移动处理器,这次英特尔将 10 纳米 SuperFin 工艺全面带到移动处理器上,同时还有全新的 Willow Cove 内核、Iris Xe 显卡、全新的酷睿及英特尔标志。这次面向消费级市场的英特尔第 11 代酷睿移动处理器又有哪些变…

lnmp php文件访问不了,记一次lnmp环境下无法执行php文件

lnmp环境搭建好后却无法正常执行php文件,坑爹啊!~[错误状况]页面直接打印出php代码内容;php文件无法执行?;查看nginx配置文件:server { listen80;server_name xxxxx.com;access_log/var/log/nginx/xxxxx.ac…

c++矩阵类_面向对象有限元编程|单元类

单元对象是构成整个结构对象的基本要素,如杆单元,梁单元,板单元,壳单元等等。虽然单元形状和特性各不相同,但基本特征和功能是相同的。比如都具有一定的几何形状,通过节点与其它单元连接,包含材…

file 选择的图片作为背景图片_酷炫!用Python把桌面变成实时更新的地球图片

如何拥有够酷炫逼格够高的桌面?本文教你轻松定制自己的桌面背景(建议带上耳机听一下地球的声音)最近疯狂迷恋地球卫星图和地球的卫星视频,看上面的视频简直极度舒适。不禁想把这种图片作为桌面背景图。这就产生抓取其背景图片作为桌面的想法。思路其实很…

摇杆怎么映射到键盘_[评测]YAMAHA PSRSX900:雅马哈升级幅度最大的高端编曲键盘键盘中国原创评测...

本文图片均由本人亲自拍摄,转载请注明出处。年前就收到这台国行PSR-SX900了。在这一个月特殊的日子里,不能出门,幸好有sx900的陪伴,让我可以天天弹琴、唱歌打发时间...现在很多地方开始逐渐复工了,我抽时间写下了这一个…

微软黑屏补丁_慎装微软最新Win7补丁 部分用户更新补丁后无法关机

清波科技2月9日报道 使用微软windows系统的用户,对于蓝屏肯定不陌生,不过现在还有比蓝屏更可怕的系统故障:无法关机和重启。近日,在微软更新了一个最新的Win7补丁后,有部分用户反馈:在试图从开始菜单关机或…

php支持二级域名共享,PHP二级域名session共享方案

一般来讲网站都会有主站和子站,比如域名是linuxidc.com,那么一般来讲linuxidc.com和www.linuxidc.com就会是主站,而像bbs.linu一般来讲网站都会有主站和子站,比如域名是linuxidc.com,那么一般来讲linuxidc.com和就会是…