理解矩阵乘法

作者: 阮一峰

日期: 2015年9月 1日

大多数人在高中,或者大学低年级,都上过一门课《线性代数》。这门课其实是教矩阵。

刚学的时候,还蛮简单的,矩阵加法就是相同位置的数字加一下。

矩阵减法也类似。

矩阵乘以一个常数,就是所有位置都乘以这个数。

但是,等到矩阵乘以矩阵的时候,一切就不一样了。

这个结果是怎么算出来的?

教科书告诉你,计算规则是,第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3。

也就是说,结果矩阵第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和。

怎么会有这么奇怪的规则?

我一直没理解这个规则的含义,导致《线性代数》这门课就没学懂。研究生时发现,线性代数是向量计算的基础,很多重要的数学模型都要用到向量计算,所以我做不了复杂模型。这一直让我有点伤心。

前些日子,受到一篇文章的启发,我终于想通了,矩阵乘法到底是什么东西。关键就是一句话,矩阵的本质就是线性方程式,两者是一一对应关系。如果从线性方程式的角度,理解矩阵乘法就毫无难度。

下面是一组线性方程式。

矩阵的最初目的,只是为线性方程组提供一个简写形式。

老实说,从上面这种写法,已经能看出矩阵乘法的规则了:系数矩阵第一行的2和1,各自与 x 和 y 的乘积之和,等于3。不过,这不算严格的证明,只是线性方程式转为矩阵的书写规则。

下面才是严格的证明。有三组未知数 x、y 和 t,其中 x 和 y 的关系如下。

x 和 t 的关系如下。

有了这两组方程式,就可以求 y 和 t 的关系。从矩阵来看,很显然,只要把第二个矩阵代入第一个矩阵即可。

从方程式来看,也可以把第二个方程组代入第一个方程组。

上面的方程组可以整理成下面的形式。

最后那个矩阵等式,与前面的矩阵等式一对照,就会得到下面的关系。

矩阵乘法的计算规则,从而得到证明。

以下为广告部分。欢迎大家在我的网络日志投放广告

[赞助商广告]

如果你想换工作,花五分钟,浏览一下 100offer,也许人生从此就会不同。

100offer 的目标是,只要你有2年以上的互联网工作经验(一线互联网公司更好),它就极有可能帮你拿到年薪 20W--80W 的 Offer。

它最近对514位用户的一份实证分析,有两点发现。

(1)所有离职的工程师之中,BAT员工最受欢迎,新工作的薪酬通常可以翻番。

(2)只有40%的程序员跳槽去了C轮、D轮和上市公司,其余60%都去了天使轮、A轮和B轮的公司,其中不乏资深的高级程序员。原因是这些创业公司刚刚起步、产品模式初步得到认可,上升空间大、技术人才需求量大、愿意给出较多的期权。

结合上面两点,年青程序员可以这样设计自己的职业生涯:

1、至少有一次大公司的成功工作经历。

所谓"成功",是指参与过知名的产品开发或主力项目经验。这一般代表你已经具备:良好的代码规范、团队协作能力、与大牛一起工作的开阔眼界成熟的技术体系。

2、然后,加入一家高速发展的创业公司。

100offer 帮助你实现这条职业道路。

(完)

留言(92条)

这篇广告发的很硬啊·~~

阮老师是要开始研究算法了吗?

@uuspider 高中基本知识而已,怎么能叫算法呢??

这一点应该是理解矩阵乘法的基础,很多的线性代数书上面都有讲到,只是不一定每个老师都讲到,好多老师都把它作为选将部分,时间不够就不讲了。

这个证明有问题吧? 从方程组到简写矩阵 这一步并没有证明。

这个以前Matric67有一篇文章, http://www.matrix67.com/blog/archives/4294 这里感觉更接近本质

矩阵乘法是线性变换。在线性空间中,选定了基底的线性变换可以用矩阵乘法表示。通过研究矩阵,就可以研究对应的线性变换。比如,酉矩阵对应酉变换。

不太明白这个东西,你怎么现在才知道
矩阵的最初目的,只是为线性方程组提供一个简写形式。

你们用的是什么教材?我记得高中的时候,学习这个的时候。
书上很明确的提到了矩阵的目的,教材还是可以好好看看,逐字逐句

残忍拒绝,这么残忍,会拉仇恨,为什么不改成“委婉拒绝”

广告挺好的。

引用ChuckLu的发言:

不太明白这个东西,你怎么现在才知道
矩阵的最初目的,只是为线性方程组提供一个简写形式。

你们用的是什么教材?我记得高中的时候,学习这个的时候。
书上很明确的提到了矩阵的目的,教材还是可以好好看看,逐字逐句

我们高中根本没这课,各个地方不一样的,别想当然

广告真遗憾,不是互联网的IT人可用不上。

我是学数学出身!!这些。。。。。1=1 1+1之类的

文字表达很清楚。

本科的时候老师有提过。

引用小恶魔的发言:

@uuspider高中基本知识而已,怎么能叫算法呢??

矩阵运算是数组的应用,数组是算法和数据结构的基础,原文说"很多重要的数学模型都要用到向量计算,所以我做不了复杂模型",可见理解矩阵是为了做“复杂模型”,做模型一定是为了找到解决问题的方法,具体化到编程,就是算法。

终于算是明白一二了。读书那会学矩阵、线性代数、复变函数这些课程,也是云里雾里。尤其复变函数,至今也是不明就里。阮博士应该去大学当老师才好。

当时学的时候遇到乘法后就不理解了,为什么莫名其妙的来个这样的规则?我那博士老师的回答让我太失望了,就是这样的规则,他的思路一直在如何解上面跟我讲,我是想知道为毛有这规则。后来没办法,自己展开3位4位 ... 去发现规律,特么的隐约觉得这跟多项式有点关系?

但是这是什么规律啊,书上没一句说这个关系啊,网上也没有啊,课后习题也有跟多项式有关系的东西...老师上面讲的都是各种花哨的解体技巧,没兴趣,bug我自己也会找,但是就是不知道这个乘法规则到底跟解多项式是不是有一腿 ....

直到现在 ... 特么的 ... 简单的东西为毛包装的那么看起来很厉害的样子..

方老师能重新编辑下高等数学教材么?当年学微积分、线性代数和概率论,学得云里雾里的。

我就想不通为啥线代课本不能这样深入浅出的讲一下呢?

这篇文章在阮老师的博客出现感觉很突兀,阮老师是不是在指导自己的小孩学习数学呢?

记得孟岩也写过一个系列, 不过是很久很久以前的

JavaScript系列教程不错,非常感谢。

高中的时候教过的,但忘的差不多了。

孟岩的理解矩阵一二三,可惜只开了个头
http://blog.csdn.net/myan/article/details/647511

阮老师这次像是为了发广告挤出来一篇呀

数学运算/推导过程本身没有任何的意义,主要是看我们赋予它什么意义

矩阵方法能简化一些计算,但也有些很牛的数学家拒绝使用矩阵,认为矩阵无法理解。可见数学家也有自己的偏好和习惯的思维方式,跟智商无关。
我是在做图像处理时用过矩阵算法,感觉比较容易理解,容易转换成程序。其他方面从来没用过。

在方程组转换到矩阵方程的过程中,已经用到了矩阵方程的规则,等于是证明的过程中就用到了待证明的结论?

其实还是没说到线性组合
很多问题从线性组合的和线性空间的角度一下就清楚了

谁用过100offer啊,感觉这才是本文的重点吧

khan 学院上有专门的一节课讲到这个。

我还以为你用计算机程序说明这个计算过程,太失望了~~~

建议不要只是自己想,找个国外的LA教程看下。这个理解还是有点浅薄。

以前我没学好数学,我就会说我数学老师死得早.现在看了你这文章后想想,他们真的早应该死掉去,特别是那些写教科书的人,那些就是死人啊死人死人.这么简单的东西被他们教得那么复杂难懂,只能说明他们的无知,跟没有学过的人一样的无知,无知,无知.

我刚刚写了一篇文章,希望对所有困惑于这个问题的人有帮助:
《再谈矩阵与矩阵乘法》
http://math.tianpeng.org/?p=1024

矩阵就是线性映射,每一个矩阵都有线性映射一一对应
矩阵乘法就是复合线性映射(f(f(x))。
复合映射也是一个线性映射,也就说也有对应矩阵
而矩阵乘法就是求出对应矩阵的方法公式

谢谢分享! 不过想请问一下。(如果不专业还请包含) 因为向量乘积也是定义空间中角度的方法。向请问,矩阵乘积与向量乘积在这个角度上又是怎样理解呢?

引用swizard的发言:

这个证明有问题吧? 从方程组到简写矩阵 这一步并没有证明。

这个证明没有问题的

阮博士,看了你几篇余弦相似性的博客,讲得浅显易懂,让我这个没有基础的人一看就懂了。期待你能多讲一些,比如Jaccard、Dice等,非常感谢!

谢谢您精彩的解答,您后面的几个步骤也可以理解成为矩阵的乘法运算起源于函数的复合运算,即f(g(x)),这里带入矩阵即可。

谢谢啊,我在上大学自己就是迷茫这个问题,感谢你的帮助非常感谢

我们高中可没教这个东西,现在终于明白了。 谢谢阮老师

广告设计的不错.

这个我们的线代老师提过,但没有您讲的那么详细。您让我对矩阵有了新的认识~

把两个矩阵放在EXCEL里排排好,相交的行列就是你要计算的数据,每天处理数据就会发现矩阵乘法真是好东西,上学时怎么也理解不了

有矩阵除法吗,怎么算,求解答,谢谢!

看完这篇,没懂矩阵存在的意义,让人感觉只是为了书写形式而书写的一种存在。还有个问题是,因为你已经脑袋里面是已经知道矩阵乘法规则是要这样写,你的证明为什么我觉得是为了拼凑规则。

上面有个同学说:从方程组到简写矩阵 这一步并没有证明。同感。

我看完原文,感觉这句话最重要:
The reason why this works is that matrix multiplication was designed so that if you multiply a matrix by the vector with all zeroes except a 1 in the i-th entry,then the result is just the i-th column of the matrix.
自己翻译一下:矩阵乘设计目标是:一个向量(只有一个1)乘以一个矩阵,假设1是第i个元素,那么乘积结果是矩阵第i列存在,其他都是0.
这里向量是空间是(0,0,1,0)这样的形式。
所以才有了行列乘积和的矩阵计算方式。

正因为如此,结合线性function特点,后面才有:
f(g(w1))=f(w1+w2)=f(w1)+f(w2)=(2w1+4w2)+(w1+3w2)=3w1+7w2,...
从而映证了乘积和是矩阵乘计算规则。
到这里矩阵乘计算规则可以接受了。

我认为,应该从回答乘法的本质说起,乘法的本质就是复合映射,比如说,数是什么,是计数,人们最早对数的认识,如3个苹果,3个梨子,但是3×3你不能说是三个苹果乘以三个苹果结果是什么9个苹果的平方吗?不是,应该这么理解三个篮子,一个篮子里有三个苹果,他们的乘积就是九个苹果,第一个三可以理解为线性代数的恒等映射即三个苹果,第二个三指的是三篮子什么,两者相乘,就是复合映射即三篮子苹果的概念,读点数学史还是有帮助的

觉得证明还是有点问题的,用到的方程组用矩阵的方式表示不就是默认了矩阵的乘法吗?还是我有点混淆?

醍醐灌顶,如果大学的时候就关注阮老师 说不准真能学好线代。

我读计算机系的时候,听说数学很重要,就把高等数学,线性代数,离散数学,概率等这些科目都学得很好,一般每一科都在90分以上,特别是线性代数,竟然能考到106分,总分为110分。可出来学的这些知识一点都没用上。

引用drunkevil的发言:

这一点应该是理解矩阵乘法的基础,很多的线性代数书上面都有讲到,只是不一定每个老师都讲到,好多老师都把它作为选将部分,时间不够就不讲了。

但是,它却是理解矩阵乘法的关键。不理解的东西,学起来就会没动力。老师往往缺少这样的实践

引用JazzCoder的发言:

我就想不通为啥线代课本不能这样深入浅出的讲一下呢?

因为你看错了书,国外的翻译教材基本都是这么讲的。。。

大学老师要是这么讲!我就早!明!白!了!好么,这个应该放在矩阵课本第一页

我觉得矩阵乘法不需要证明,它就是人设定的规则,就要那么写,又不是自然规律

作为刚接触数组的编程小白,这篇文章解了我的惑,易懂。

通俗易懂,又回顾了一下矩阵算法,谢谢。

其实是这样的:
矩阵*向量 可以看作空间转换后的线性组合。

把开头的0112换成0123其实更好懂点 不过看到后面也明白了 谢谢老师 很有帮助

引用太阳以西的发言:

把两个矩阵放在EXCEL里排排好,相交的行列就是你要计算的数据,每天处理数据就会发现矩阵乘法真是好东西,上学时怎么也理解不了

可否展开具体说说呢?多谢

这个证明真是扯啊,仔细看步骤,中间有一步是用矩阵的乘法规则去展开矩阵,然后比照得出结论,这是用结论证明结论。
矩阵的乘法是一种定义,不需要证明的啊,同时也是无法证明的啊,是一个概念。类似的其他规则的乘法有逐项乘,数乘,还有哈达玛矩阵乘法,都是历史时期数学家为了解决某些问题引进的规则。为什么通常意义的矩阵乘法是这样?这个楼上有人说了是最初为了解多元一次方程组引入的。
我看不少人看完之后纷纷觉得醍醐灌顶,然后咒骂数学老师没讲明白,突然觉得我们中国的工程师的数学素质好差啊。

引用三五的发言:

觉得证明还是有点问题的,用到的方程组用矩阵的方式表示不就是默认了矩阵的乘法吗?还是我有点混淆?

你没混淆,博主就是在扯淡。哪有用结论去证结论的。建议楼主改改。不要再让一些“程序猿”觉得恍然大悟之后,再让自己的数学老师背锅了。

确实,虽然矩阵乘法我之前也没明白原理,但看中间的证明过程有一步感觉就是用结论证明结论。。

1、矩阵乘法是定义;2、证明却有已知p,求证p味道

我一开始也是以为用结论证明结论。只因为“从方程式来看,也可以把第二个方程组代入第一个方程组。”这一步没真正搞清楚。

B站里有3blue1brown,线性代数的本质,里面讲得很有意思。

这是错误的证明方式,你先用了矩阵相乘的规则,然后去证明矩阵相乘具有这样的规律。就向上所说的1 = 1,使用了1 = 1这个规则去证明1 = 1,这是不成立的。

楼主把自己绕进去了。这算什么证明?假如我改一下"矩阵乘法规则",比如是将两个乘积相减,然后用你的方法,也能证明出相减的规则是正确的。

哈哈哈哈哈啊哈哈哈!

阮老师,我觉得知乎这个回答讲的很不错,算是讲了一个简单的模型:
https://www.zhihu.com/question/21351965

能把复杂的东西说清楚,就非常的不容易。厉害!!!

第二个矩阵代入第一个矩阵那一步所得等式用了矩阵结合律,(a11,a12,a21,a22)(x1,x2)=(a11,a12,a21,a22)(b11,b12,b21,b22)(t1,t2)不对,(a11,a12,a21,a22)(x1,x2)=(a11,a12,a21,a22)[(b11,b12,b21,b22)(t1,t2)],结合律没有证明不能使用。

看阮老师这个过程一目了然!
当年在大学接触的矩阵运算,没有这些证明过程,光死学法则,也看不到应用场景,导致我厌学,貌似还挂了┭┮﹏┭┮

哇,,还好我是初学就看到这个,太赞了,一直想不通行列式跟矩阵到底是干啥的来着

正如阮老师开篇说的,对于矩阵乘法我一直也处于云里雾里的状态,今天有幸看到此文,顿时拨开了我心头迷雾,大赞

3X3…矩阵没证明

这广告发的,朴实无华,有理有据,是年青程序猿的不二算泽

最后这个证明怎么好象是用矩阵相乘的公式证明矩阵相乘公式?因为最后一步整理成 t1\t2 这一步貌似就用了公式啊

这个可以说是一种理解方式,但并不是矩阵相乘定义的历史真相或者最初发现,因为在把线性方程组写成矩阵形式Ax=b的时候已经包含了矩阵的乘法规则:对应行元素于对应列元素点乘然后相加。发展过程应该是人们在求解线性方程组时,发现”某种表达“可以简化求解符号,然后“某种表达”成了矩阵,再后来发现了利用矩阵本身还有更多优良性质。。。。。。。

x1,x2, t1,t2竖着写,就是莫名的看不惯,横着写也一样可以证明啊

引用rt的发言:

我们高中根本没这课,各个地方不一样的,别想当然

博主可能不是想当然,可能是记错了,我们高中没用这个路子教,大学用了这个路子。当然也可能像你说的,有的地方高中就这么教了有的没有

对我来说蛮合用的,我就想把忘了的乘法简单计算唤醒个记忆,这篇帮我目的达成。我上课老师也是走这个路子的,路子一样所以恢复记忆更快了。适合我

矩阵相乘的本质无非就是空间的基向量的变换。

这个矩阵必须是正方形才成立吧?

如果是d-dimension * (n-dimension*d-dimension),其中,d<>n,您这个还能证明?

书上就是这么介绍的,你不懂肯定是书没学好

引用三五的发言:

觉得证明还是有点问题的,用到的方程组用矩阵的方式表示不就是默认了矩阵的乘法吗?还是我有点混淆?

同感,感觉还是用矩阵乘法的规则去证明矩阵乘法的规律

引用小恶魔的发言:

@uuspider高中基本知识而已,怎么能叫算法呢??

你高中就学矩阵了?

非常感谢,一下就理解了

这个网站不错,以动画的形式演示矩阵相乘的过程
http://matrixmultiplication.xyz/

翻了10站,看不懂。这站看懂了,忒好。

https://www.mathsisfun.com/algebra/matrix-multiplying.html
这个链接就有点乘的基础教学。

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接