前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python|详解矩阵乘法

Python|详解矩阵乘法

作者头像
算法与编程之美
发布于 2020-03-25 09:37:25
发布于 2020-03-25 09:37:25
2.6K0
举报

问题描述

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

[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.运行效果

图2.4.1 运行效果

结语

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python语言程序设计之三--列表Li
最近在学习列表,在这里卡住了很久,主要是课后习题太多,而且难度也不小。像我看的这本《Python语言程序设计》--梁勇著,列表和多维列表两章课后习题就有93道之多。我的天!但是题目出的非常棒,许多题目都具有相似性。这倒不是说这些题目类似,而是它们都会用到某一个特定的函数,或者会用到某一个特定的算法。这里我要整理一下常见的列表操作和容易犯错的地方。
py3study
2020/01/17
1.1K0
Python编程面试前要解决的10个算法
别像我刚开始解决问题时那样天真。尽管我认为时不时地破解几个算法很有趣,但我从来没有花太多时间去实践,只为解决问题,其他什么都不顾,可能有时候马马虎虎解决了问题,但不明白为什么这样。对于我自己,我一直在想,在一天结束时,整天求解算法有点太呆板了,它在实际的日常工作环境中并没有实际的用途,从长远来看,它也不会给我带来多少好处。
计算机与AI
2020/12/14
5910
Python编程面试前要解决的10个算法
矩阵乘法问题
问题描述 给定n个矩阵:A1,A2,...,An,其中Ai与Ai+1是可乘的,i=1,2...,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。 ---- 矩阵乘法
我没有三颗心脏
2018/04/26
1.5K0
矩阵乘法问题
Python|外卖店优先级
外卖系统中维护着N家外卖店,编号1~N。每家外卖店都有一个优先级,初始时(0时刻)优先级都为0。
算法与编程之美
2020/06/03
4480
Mapreduce实现矩阵乘法的算法思路
大数据计算中经常会遇到矩阵乘法计算问题,所以Mapreduce实现矩阵乘法是重要的基础知识,下文我尽量用通俗的语言描述该算法。
星哥玩云
2022/07/03
1.3K0
Mapreduce实现矩阵乘法的算法思路
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】
根据算术基本定理又称唯一分解定理,对于任何一个合数, 我们都可以用几个质数的幂的乘积来表示。
红目香薰
2022/11/29
4550
【蓝桥杯省赛】冲刺练习题【数学公式】倒计时【06】
Strassen矩阵乘法问题(Java)
矩阵乘法是线性代数中最常见的问题之一 ,它在数值计算中有广泛的应用。 设A和B是2个nXn矩阵, 它们的乘积AB同样是一个nXn矩阵。 A和B的乘积矩阵C中元素C[i][j]定义为:
WHYBIGDATA
2023/01/31
7010
Strassen矩阵乘法问题(Java)
详解Python中的算术乘法、数组乘法与矩阵乘法
(2)列表、元组、字符串这几种类型的对象与整数之间的乘法,表示对列表、元组或字符串进行重复,返回新列表、元组、字符串。
Python小屋屋主
2021/05/11
9.5K0
详解Python中的算术乘法、数组乘法与矩阵乘法
矩阵乘法的java实现
文章目录 1、算法思想 2、代码实现 1、算法思想 最近老是碰到迭代问题,小数太多手算又算不过来,写个矩阵乘法辅助一下吧。 有两个矩阵A和B,计算矩阵A与B相乘之后的结果C。 A的列数必须等于B的行数 用矩阵A的第i行的值分别乘以矩阵B的第J列,然后将结果相加,就得到C[i][j]。 矩阵A的行等于C的行,矩阵B的列等于C的列,这两个数值用来控制循环的次数,但是每一步中需要把行和列中对应的乘机求和,所以再加一个内循环控制乘法求和就行。 下面我们进行矩阵乘法的测试 A = \begin{
别团等shy哥发育
2023/02/25
1.8K0
矩阵乘法的java实现
2017年天梯赛全国总决赛题集 L1-8 矩阵A乘以B
给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra行、C​a列,B有R​b行、Cb ​​ 列,则只有Ca与Rb相等时,两个矩阵才能相乘。
C you again 的博客
2020/09/15
2320
004. 寻找两个正序数组的中位数 | Leetcode题解
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。
苏南
2020/12/16
1.5K0
004. 寻找两个正序数组的中位数 | Leetcode题解
百道Python入门级练习题(新手友好)
【输入形式】 一行,供24个整数。以先行后列顺序输入第一个矩阵,而后输入第二个矩阵。
py3study
2020/01/19
7130
独家 | 在Python编程面试前需要学会的10个算法(附代码)
本文为大家介绍了最近在Python编程面试中反复出现的10个基础算法问题,并且给出了相应的解答过程。
数据派THU
2020/09/14
4940
独家 | 在Python编程面试前需要学会的10个算法(附代码)
Python numpy tensorflow 中的 点乘 和 矩阵乘法
若 w 为 m*1 的矩阵,x 为 m*n 的矩阵,那么通过点乘结果就会得到一个 m*n 的矩阵。
西湖醋鱼
2020/12/30
2K0
Python numpy tensorflow 中的 点乘 和 矩阵乘法
全网最详细!油管1小时视频详解AlphaTensor矩阵乘法算法
---- 新智元报道   编辑:Aeneas David 【新智元导读】为加速矩阵乘法,DeepMind的AlphaTensor都有什么神操作?1小时超长视频,带你读懂这篇Nature封面。由浅入深,全网最细。 DeepMind前不久发在Nature上的论文Discovering faster matrix multiplication algorithms with reinforcement learning引发热议。 这篇论文在德国数学家Volken Strassen「用加法换乘法」思路和算法的
新智元
2022/10/11
1.2K0
全网最详细!油管1小时视频详解AlphaTensor矩阵乘法算法
矩阵乘法观点-几何含义
矩阵乘法放在哪里都是一个比较奇怪的东西。以及我是个笨逼,如果不能理解的很深刻,我就有点不想做它相关的任何事情,因为那对我来说它是失控的,单方面的失控。
云深无际
2024/08/21
1070
矩阵乘法观点-几何含义
Java-矩阵乘法
"Never, never, never, never give up."  -----Winston Leonard Spencer Churchill
圆号本昊
2021/09/24
8980
Java-矩阵乘法
numpy基础属性方法随机整理(8):矩阵乘法 及 对应元素相乘的矩阵乘法
矩阵乘法: (m,n) x (n,p) --> (m,p) # 矩阵乘法运算前提:矩阵1的列=矩阵2的行 3种用法: np.dot(matrix_a, matrix_b) == matrix_a @ matrix_b == matrix_a * matrix_b
狼啸风云
2020/12/29
1.8K0
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-86 矩阵乘法
        这段时间我会把蓝桥杯官网上的所有非VIP题目都发布一遍,让大家方便去搜索,所有题目都会有几种语言的写法,帮助大家提供一个思路,当然,思路只是思路,千万别只看着答案就认为会了啊,这个方法基本上很难让你成长,成长是在思考的过程中找寻到自己的那个解题思路,并且首先肯定要依靠于题海战术来让自己的解题思维进行一定量的训练,如果没有这个量变到质变的过程你会发现对于相对需要思考的题目你解决的速度就会非常慢,这个思维过程甚至没有纸笔的绘制你根本无法在大脑中勾勒出来,所以我们前期学习的时候是学习别人的思路通过自己的方式转换思维变成自己的模式,说着听绕口,但是就是靠量来堆叠思维方式,刷题方案自主定义的话肯定就是从非常简单的开始,稍微对数据结构有一定的理解,暴力、二分法等等,一步步的成长,数据结构很多,一般也就几种啊,线性表、树、图、再就是其它了。顺序表与链表也就是线性表,当然栈,队列还有串都是属于线性表的,这个我就不在这里一一细分了,相对来说都要慢慢来一个个搞定的。蓝桥杯中对于大专来说相对是比较友好的,例如三分枚举、离散化,图,复杂数据结构还有统计都是不考的,我们找简单题刷个一两百,然后再进行中等题目的训练,当我们掌握深度搜索与广度搜索后再往动态规划上靠一靠,慢慢的就会掌握各种规律,有了规律就能大胆的长一些难度比较高的题目了,再次说明,刷题一定要循序渐进,千万别想着直接就能解决难题,那只是对自己进行劝退处理。加油,平常心,一步步前进。
红目香薰
2023/02/16
1550
SAS矩阵重组
最近看到一个群友提的一个问题:将上图中的名为HAVE的数据集转置成名为WANT的数据集。实现的方法有多种,最易懂的方法应该是TRANSPOSE,下面介绍其他几种方法:
专业余码农
2020/07/16
9540
SAS矩阵重组
相关推荐
Python语言程序设计之三--列表Li
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文