ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: czzqb

[分享] [分享]从头细说MMULT

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2007-10-24 12:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:MMULT

绝对是好帖子,不知道楼主怎么控制顶楼几层的,呵呵,我觉得很容易别同学抢占第二层,第三层的呀?

好帖,一定要收藏!!

TA的精华主题

TA的得分主题

发表于 2007-10-24 18:26 | 显示全部楼层

本人线性代数学的不错的...嘿嘿,自吹一下

上面的改的形式也讲的很好,但现在还不能直接用MMULT来思考问题,现在用SUM我是可以直接用SUM来思

考的,我想这估计只能考摸爬滚打来培养感觉了。

写出SUM公式,掐行列关系整出一个MMULT的公式,说实在现在是心里没底,呵呵。

谢谢斑竹讲课。

-------------------------------------------------------------------------------------------

--------------------------------------------------------

理了理思绪,我觉得单就这个问题我们如果从逻辑上分析通透了对我们会大有帮助,我的意思是整这个MMULT函数的时候我们不要去掐捏行列关系(我知道版主的出发点绝对是好的,给我们初学者一套可操作的步骤,但我觉得脱离了逻辑经络,使得我们不能直接用这个函数来思考,当然用多了估计也会熟悉)。以下内容为了让我们初学者能教容易的直接用这个函数来思考,来解决问题,写参数的时候心中有谱。

MMULT(array1,array2),为了以后有轻车熟路的感觉,我们给自己演练套路:把array1(I行K列,I确定的,就是结果区域的记录条数,在本例中就是F2:F22的条数=21)当成是条件矩阵,把array2(K行J列,K行是确定的,应该和原数据中的记录条数对应,本例中就是B2:B19的行数=18;这个是有一般性意义的,J其实也是确定的,就是所要条件汇总的数据字段数,本例中就一个汇总字段-数)当成是数据矩阵于是两个矩阵相乘得到的矩阵就是满足条件的对应数据的汇总

不熟悉这个函数的初学者会觉得上面蓝颜色的结论是有那么点跳跃,心里不踏实,有待琢磨一会,尤其对汇总两字体会不那么真切。那么让我们来扶平这份困惑...

继续看帖考试:SUM((B2:B19=F2)*(A2:A19=E2)*(C2:C19)) 是对XX=A,YY=H汇总能理解吗?
如果能理解,那么跳过下面一段,如果不能那么容我唠叨几句...

这是个很朴素的SUM数组公式,其中的三个乘积因子都是数组,方向相同的一维数组相乘仍然是一维数组,各个元素分别是乘积因子对应元素的乘积。上面的乘积因子我们也可以人为的分为条件因子数据因子,条件因子的元素不是1(TRUE),就是0(FALSE),这样结合同向一维数组相乘的法则得到的结果数组元素不是0就是原数据因子的对应数据。(相乘 逻辑上相当于 与 ,这样就完成了多条件的逻辑任务,另外就是把不符合条件的数据剔除了--变成了0,在SUM相加求和的过程中加0对汇总总数没有贡献,所以在逻辑上相当于剔除)这样用SUM再汇总一下就是把满足条件的数据进行了汇总。

用上面的公式SUM((B2:B19=F2)*(A2:A19=E2)*(C2:C19))得出的结果是G2的值,那么怎么剖析MMULT得出G2的过程呢?这里是核心关键了,思绪象火花一样跳跃的厉害,有点把持不住了...

G2在得出的那个21行1列矩阵(就是本例中的结果)的位置是 a11,其实就是array1的第一行和array2的第一列的SUM公式SUM((array1的第一行)*(array2的第一列))。同理结果矩阵的任意一项aij=sum((array1的第i行)*(array2的第j列)).

我们怎么说明这个事实呢,走....

array2的第1列=C2:C19array1的第一行=(F2:F22=TRANSPOSE(B2:B19))*(E2:E22=TRANSPOSE(A2:A19))
第一行=(F2=TRANSPOSE(B2:B19))*(E2=TRANSPOSE(A2:A19))=值=(B2:B19=F2)*(A2:A19=E2

借用矩阵运算法则 aij=array1的第i行数组 和 array2的第j列数组 相对应元素相乘相加,其实就是=sum((array1的第i行数组)*(array2的第j列数组))  如图:


体会一下array1的每一行其实就是一个条件判断。用一行条件判断去乘一列数据再求和结果就是条件汇总。

其实这个数学结果在MMULT的计算法则里面已经表达出来了,我只是借用SUM数组来进行分步走,分步理解。把数学过程的逻辑意义表达出来进行强化理解。

好了,我觉得到这一步应该解决了对上面那个结论“于是两个矩阵相乘得到的矩阵就是满足条件的对应数据的汇总。”的困惑了。 这里用了对应数据几个字本意是这样的,本例中统计的只有 数 一个数据字段,实际中更多的情况应该会有 数 ,数2,数3 这样多个数据字段,用了对应更具一般性。写公式的时候只要把array2从单列变成多列就是了。

为了方便我一样的初学者,我再补充一点背景知识:两个矩形区域的数据相乘(行列必须一样,否则就会有错误值)得到的结果是一个相同行列的矩形区域,各个元素就是相对应各个元素的乘积。为了减少误解我打个比方 矩形1区域*矩形2区域 就相当于把两个矩形贴在一起,把贴在一起的重叠单元格数据进行相乘操作,在这两个矩形上再贴一个空白的矩形,重叠单元格相乘的结果放到空白的矩形单元格里面,这个和矩阵相乘是有区别的,和同向一维数组的加 乘 操作是平行的。

如果还有要什么要做背景知识的话,我觉得就是斑竹的看帖考试:F2:F22=TRANSPOSE(B2:B19)是21行18列

对于这种 行数组(y1,y2,y3,....) "运算符" 列数组(x1,x2,x3,...)的运算我是这么形象理解的,当成一张表格 ,或者借用象限的话就是第四象限,X轴方向是列字段,Y轴负方向就是行数组,然后运算结果就是各个元素进行 "运算符"运算,结果放在坐标(xi,yj)上。那么容易理解 结果矩阵的行数就是原来行数组的行,矩阵的列数就是原来列的列数。这是对垂直向量运算的一个具体的特列表述,其实垂直向量运算就满足矩阵法则。

好了,现在来看看我们怎么样直接用MMULT来进行思考:
我们知道各个限制条件,我们知道要汇总的数据字段,我们运用套路:MMULT(array1-条件矩阵array2-

数据矩阵)=MMULT((F2:F22=TRANSPOSE(B2:B19))*(E2:E22=TRANSPOSE(A2:A19)),C2:C19)这里把F2:F22,

E2:E22写在前面是为了让思路更加的清晰,写的同时心里可以这么想 每一行就是一个条件判断,比如判断Fi=transpose(b2:b19).

所以用MMULT条件汇总的时候使用套路,条件矩阵数据矩阵。数据矩阵原盘照抄;写条件矩阵的时候记得把结果区的单元格区域放前面,然后记得用=号时两边方向是垂直的就行了。

其实今天才算第一次和MMULT接触,还没实践过,哈哈。不过忍不住要发表,哈哈。享受丢脸。嘿嘿
胡诌一统,希望对初血者有用,千万不要看的出血呀,呵呵



[此贴子已经被作者于2007-10-25 10:04:26编辑过]
e7mZkxO3.jpg

UHEA3Zoa.rar

2.24 KB, 下载次数: 99

TA的精华主题

TA的得分主题

发表于 2007-10-25 18:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

对楼主的付出表示感谢。

收藏了,慢慢学习

TA的精华主题

TA的得分主题

发表于 2007-10-26 12:35 | 显示全部楼层

今天用自己的理解第一次实用了MMULT,用ENTER一敲发现错的,全是#VALUE,于是全身发热...

后来尝试了CTRL+ALT+ENTER 哈哈 结果出来了,真开心。

初学者可以尝试我的方式,用起来很简单

TA的精华主题

TA的得分主题

发表于 2007-10-26 13:37 | 显示全部楼层

收藏了,正在好好学习,谢谢了!

TA的精华主题

TA的得分主题

发表于 2007-10-26 16:59 | 显示全部楼层

胡剑0227:

看来你的贴子对我来说真是对牛弹琴了,又看帮助,又看实例,真真的羞死我也

TA的精华主题

TA的得分主题

发表于 2007-10-28 11:07 | 显示全部楼层

啊,这样呀,不好意思.看来我又自作聪明了,不过我想你漫漫看也许就会突然明白的.

TA的精华主题

TA的得分主题

发表于 2007-11-1 10:36 | 显示全部楼层

好东西,下载学习中,感谢楼主。虽然仍然一头的雾水,但决心下定,坚决要掌握MMULT......

[em22][em22][em22]

TA的精华主题

TA的得分主题

发表于 2007-11-1 21:43 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-11-2 10:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢楼主的无私奉献!学习了!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-6 08:15 , Processed in 0.037174 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表