题目描述

【问题描述】

编写程序,完成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 都在这里了

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

  1. python入门100例题-这 100 道 Python 题,拿去刷!!!

    2020年,学 Python 还有价值吗? 根据 2020 年 2 月的 TIOBE 编程语言排行榜显示,Python仍然稳居第三位. 此排行榜排名基于互联网上有经验的程序员. 课程和第三方厂商的数量 ...

  2. python教程简单例题_非常适合Python菜鸟练手的趣味题

    点击蓝字"python教程"关注我们哟! Python虽然入门容易,但是涉及的知识点非常多,而且技巧性很强!这些技巧就像一串一串的珠子,需要一些题目的不断的练手才能熟练掌握串联起来 ...

  3. python面试题_春招苦短,我用百道Python面试题备战

    对于机器学习算法工程师而言,Python是不可或缺的语言,它的优美与简洁令人无法自拔.那么你了解过Python编程面试题吗?从Python基础到网页爬虫你是否能全方位Hold住?今天,机器之心为读者们 ...

  4. 百道Python面试题实现,搞定Python编程就靠它

    机器之心报道 机器之心编辑部 想要备战 Python 面试,这两个项目有千道 Python 问题与实现. 之前机器之心介绍了 PHD 大牛的求职之路,很多读者感觉这位大牛太厉害了,他的经历对我们帮助不 ...

  5. vue如何生成公钥私钥_百行Python代码演示1私钥生成多公链公钥原理。|区块链财富指北私钥篇(2)...

    <区块链财富指北>系列文章由NOCY.COM策划,肖南飞主笔撰写. 技术选型基于BOScore公链,旨在以有趣易懂的方式传播普及区块链技术,不构成任何投资建议! 学习之前说学习 今天这篇文 ...

  6. python递归函数例题_递归案例python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 而对应的中文翻译 "递归" 却表达了两个意思:"递 ...

  7. python爬虫获取方法_小白学python爬虫:2.获得数据

    在上一篇文章我我们已经完成了对网页的分析,包括了:在源码中数据的定位:获取方法(xpath).那么在获得数据之前我们考虑的则是如何获取源码. 接下来我们将学习如何从服务器获得源码. #写在前面&quo ...

  8. python 文本翻译 项目_如何用python批量翻译文本?

    首先,看一下百度翻译的官方api文档. http://api.fanyi.baidu.com/api/trans/product/apidoc # coding=utf-8 #authority:bi ...

  9. 我的python学习之路_我的Python入门之路

    今天跟大家分享个好消息,之前整理了公众号上的文章去投稿,最终在编程教室2019新春征稿活动中拿到了优秀奖,赚取了人生第一笔稿费,着实开心! 获得了Crossin编程教室的肯定与认可,开心之余,我也想回 ...

最新文章

  1. 反转链表的golang实现
  2. oracle在非归档模式下,Oracle在非归档模式下不能更改表空间为备份模式
  3. 面试mysql慢查询_剑指Offer面试题:如何定位并优化慢查询sql
  4. Android Studio下gradle环境搭建
  5. 一些看起来有用但没用过的函数
  6. 严重: Exception sending context initialized event to listener instance of class
  7. android 高德amap开发二(地图操作)
  8. angular解决跨域问题
  9. java使用fast报表控件_FastReport报表控件的使用
  10. 一名女程序员的职业规划
  11. Reservoir Computing简介
  12. 新生电脑Win10入门基础操作
  13. rsync使用ssh指定端口
  14. 安卓程序报错: No package ID ff found for ID 0xffffffff.
  15. strcmp,strcpy,strstr函数
  16. ArcEngine创建平头缓冲区的方法
  17. 用NetTerm连接虚拟机的telnet服务,打造轻松自如的虚拟机实验环境
  18. 服务器系统安装(DELL)
  19. 【pytorch】ECA-NET注意力机制应用于ResNet的代码实现
  20. Python 、Sqlite3数据库、单片机 、RC522 -公交卡管理系统(含部分源码)#可刷卡登陆

热门文章

  1. 分层结构,协议,接口,服务
  2. 类似collect2: ld returned 1 exit status的错误
  3. 2016专接本c语言真题_云南特岗教师考试真题(中学信息技术)9套(无答案)
  4. html border阴影效果_【开发小技巧】026—如何使用HTML和CSS创建浮动框阴影效果?...
  5. 优先队列priority_queue自定义比较函数
  6. 吴恩达《机器学习》学习笔记二——单变量线性回归
  7. OpenCV——绘制基本图形
  8. MFC中文件打开与保存
  9. 手写字母数据集转换为.pickle文件
  10. Android之ScrollView