ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E文精选 > 函数与公式 > 我对数组与数组运算的认识(欢迎探讨)

我对数组与数组运算的认识(欢迎探讨)

作者:绿色风 分类: 时间:2022-08-17 浏览:140
楼主
gouweicao78
【理清概念】
理清概念,不要混淆数组、数组公式。
数组,就是元素的集合,按行、列进行排列。单行或单列的数组是一维数组,多行多列(含2行2列)的数组是二维数组。
数组公式,仅仅是对按了ctrl+shift+enter结束公式的编辑方式的一种称呼,与数组完全是两码事。

【运算规律】
1、单值x与数组arry运算:执行x与arry中每一个元素分别运算并返回结果,也就是与arry本身行列、尺寸一样的结果。
例1、2*{1,2;3,4;5,6},执行2*1、2*2、2*3……2*6运算,并返回3行2列的结果{2,4;6,8;10,12}
例2、"A"&{"B","C"}返回{"AB","AC"}
例3、"A"={"B","A","C"}返回{FALSE,TRUE,FALSE}

 

2、同向一维数组运算:执行arry1与arry2对应位置的元素分别运算并返回结果。要求arry1与arry2尺寸必须相同,否则多余部分返回错误
例1、{1;2;3}*{4;5;6}返回{4;10;18}
例2、{1,2,3,4}*{4,5,6}返回{4,10,18,#N/A}

 

3、异向一维数组运算:执行arry1的每一元素与arry2的每一元素分别运算并返回结果,得到两个数组的行数*列数个元素,也就是M行数组与N列数组运算结果为M*N的矩阵。
例1、{1;2;3}*{4,5,6,7,8},执行1*4、1*5、……1*8、2*4、2*5……3*8,返回{4,5,6,7,8;8,10,12,14,16;12,15,18,21,24}

 

4、一维数组与二维数组运算:要求二维数组其中一个方向与一维数组同向同尺寸,比如M*N的二维数组与M行或者N列的数组运算,在同向的运算类似同向一维数组之间的位置对应,在异向的运算则类似单值与数组之间的一一运算。超出尺寸范围都返回错误值。
例:{1,2,3,4}*{1,2,3,4,5;6,7,8,9,10}即4列一维数组与2行5列数组运算,列方向上两个数组运算按位置一一对应的,不足部分用#N/A补齐,行方向上则是一对多的运算,返回{1,4,9,16,#N/A;6,14,24,36,#N/A}。

 
5、二维数组之间运算:要求尺寸相同,并执行相同位置元素一一对应的运算,超出尺寸部分返回错误。
例:{1,2;3,4}*{1,2,3;4,5,6;7,8,9}执行1*1,2*2,3*4,4*5,其余部分用#N/A补齐,返回={1,4,#N/A;12,20,#N/A;#N/A,#N/A,#N/A}

 
2楼
gouweicao78
对于1楼的几种数组间的直接运算,还有一种观点就是:数组尺寸自适应变化,小的适应大的。
比如:
例1、2*{1,2;3,4;5,6}——将2视为一个小数组,自动跟随大数组的尺寸变化为{2,2;2,2;2,2},再执行二维数组间同位置元素一一对应运算。

 
例2、{1,2,3,4}*{4,5,6}——将{4,5,6}自动随大数组尺寸变化为{4,5,6,#N/A},再执行同向同尺寸一维数组间同位置元素一一对应运算。
例3、{1;2;3}*{4,5,6,7,8}——对于arry1来说,arry2的列方向是大尺寸,反之对于arry2来说,arry1的行方向是大尺寸,因此分别变化为:{1,1,1,1,1;2,2,2,2,2;3,3,3,3,3}*{4,5,6,7,8;4,5,6,7,8;4,5,6,7,8},再执行二维数组间同位置元素一一对应运算。

 
例4、{1,2,3}*{1,2,3,4;5,6,7,8}——将{1,2,3}变为{1,2,3,#N/A;1,2,3,#N/A}再执行二维数组间同位置元素一一对应运算。
例5、{1,2;3,4}*{1,2,3;4,5,6;7,8,9}将{1,2;3,4}变为{1,2,#N/A;3,4,#N/A;#N/A,#N/A,#N/A},再执行二维数组间同位置元素一一对应运算。

 

也就是说数组之间都可以看成二维(一维数组可以看成二维的其中一维尺寸为1),把尺寸统一了,同方向上尺寸不足部分用#N/A填补,不同方向上的则复制小尺寸数组,不足部分也用#N/A填补。

这种理解方式,比较容易记。
3楼
gouweicao78
前面阐述的是数组之间的直接运算,比如直接比较、文本合并、直接四则运算等。有些数组运算,是通过函数完成的,比如MMULT函数对于arry1、arry2的尺寸要求和运算规则与上面则不同,这是由于函数自身的原理不同,但本帖不准备说这些。

把1楼的常量数组,把元素都放在单元格中可以得到同样的结果,比如:{1;2;3}*{4,5,6,7}可以看为A1:A3*B1:E1,等等。
之所以选择常量数组来作例子,是因为常量数组的表述仅到二维。而单元格区域(也可以算是数组的一种存在方式),则可能存在多维引用的情况,反而不利理清思路。

从上面这些例子看,数组运算要注意几个重要特性:
1、对数组的方向、尺寸的要求:超尺寸的部分是不被接受的。
2、元素的位置对应关系:“数组”一词在繁体版中称为“阵列”,个人觉得更有这种位置关系的味道。
3、数组运算在于“分别”,而不似SUM(A1:A3)或COUNT(A1:C10)之类的,一股脑儿就算个结果出来。
4、用1楼比较枯燥一点的观点来看,同向一维数组运算,结果不会因为数组叠加多出其它的维度来,而异向一维数组的运算可以叠加出二维的结果。用2楼的数组尺寸自适应观点来看,也可以视为:为了运算,先自身变身多出其它维度来,再运算。
总之,常量数组的维度止于二维。


单元格区域数组的运算中,所有一维、二维的运算都与常量数组有相同情况,但是对于引用函数返回的单元格引用,则可以因为参数是数组产生叠加,返回超过二维的多维引用(另帖阐述)。
4楼
meiokok
新人来了,慢慢消化学习
5楼
flower8
目前初级水平   正准备偏向学习数组和VBA  也是通过楼主的博客来这里(其实以前来过,但是没注册)的。多谢!
6楼
Cowisen
http://www.exceltip.net/thread-3498-1-1.html

楼主写得太精彩了,我也学习了。
但有一疑问,在二维数组之间运算中,如下
例:{1,2;3,4}*{1,2,3;4,5,6;7,8,9}执行1*1,2*2,3*4,4*4(是否应为4*5)
7楼
gouweicao78
数组之间的运算关键词:分别  对应
土一点说“各回各家,各找各妈”。
8楼
sam.tan
虽复杂点,但得好好学习.
9楼
lrlxxqxa
“各回各家,各找各妈”,很形象的比喻
10楼
wangqilong1980
非常好用,谢谢版主。
11楼
蒸蒸日上
顶上去,好好学习,蒸蒸日上!
12楼
snowangle007
先收藏了,一有时间就看。
13楼
jiujiu8900
学习下,谢谢了
14楼
健康快乐123
讲解清楚,是个好老师
15楼
军港之夜
新来的,看着不是很懂,一维数组之间的运算有些公式里可以看到、也明白一些。可以介绍一下在什么情况下, 能用到二维数组之间运算。谢谢。
16楼
tyjsc
草版太厉害了
17楼
谢唐

18楼
军港之夜
谢谢。
19楼
guoxiaozheng
好像高等数学里面的矩阵,请教一下版主:这个数组是不是就是矩阵的意思?
20楼
guoxiaozheng
此外,斑竹的第三点:异向一维数组运算的运算,它的写法是这样那个的吗?、{1;2;3}*{4,5,6,7,8}
21楼
gouweicao78
【理清概念】
理清概念,不要混淆数组、数组公式。
数组,就是元素的集合,按行、列进行排列。单行或单列的数组是一维数组,多行多列(含2行2列)的数组是二维数组。
数组公式,仅仅是对按了ctrl+shift+enter结束公式的编辑方式的一种称呼,与数组完全是两码事。

【运算规律】
1、单值x与数组arry运算:执行x与arry中每一个元素分别运算并返回结果,也就是与arry本身行列、尺寸一样的结果。
例1、2*{1,2;3,4;5,6},执行2*1、2*2、2*3……2*6运算,并返回3行2列的结果{2,4;6,8;10,12}
例2、"A"&{"B","C"}返回{"AB","AC"}
例3、"A"={"B","A","C"}返回{FALSE,TRUE,FALSE}

 

2、同向一维数组运算:执行arry1与arry2对应位置的元素分别运算并返回结果。要求arry1与arry2尺寸必须相同,否则多余部分返回错误
例1、{1;2;3}*{4;5;6}返回{4;10;18}
例2、{1,2,3,4}*{4,5,6}返回{4,10,18,#N/A}

 

3、异向一维数组运算:执行arry1的每一元素与arry2的每一元素分别运算并返回结果,得到两个数组的行数*列数个元素,也就是M行数组与N列数组运算结果为M*N的矩阵。
例1、{1;2;3}*{4,5,6,7,8},执行1*4、1*5、……1*8、2*4、2*5……3*8,返回{4,5,6,7,8;8,10,12,14,16;12,15,18,21,24}

 

4、一维数组与二维数组运算:要求二维数组其中一个方向与一维数组同向同尺寸,比如M*N的二维数组与M行或者N列的数组运算,在同向的运算类似同向一维数组之间的位置对应,在异向的运算则类似单值与数组之间的一一运算。超出尺寸范围都返回错误值。
例:{1,2,3,4}*{1,2,3,4,5;6,7,8,9,10}即4列一维数组与2行5列数组运算,列方向上两个数组运算按位置一一对应的,不足部分用#N/A补齐,行方向上则是一对多的运算,返回{1,4,9,16,#N/A;6,14,24,36,#N/A}。

 
5、二维数组之间运算:要求尺寸相同,并执行相同位置元素一一对应的运算,超出尺寸部分返回错误。
例:{1,2;3,4}*{1,2,3;4,5,6;7,8,9}执行1*1,2*2,3*4,4*5,其余部分用#N/A补齐,返回={1,4,#N/A;12,20,#N/A;#N/A,#N/A,#N/A}

 
22楼
gouweicao78
对于1楼的几种数组间的直接运算,还有一种观点就是:数组尺寸自适应变化,小的适应大的。
比如:
例1、2*{1,2;3,4;5,6}——将2视为一个小数组,自动跟随大数组的尺寸变化为{2,2;2,2;2,2},再执行二维数组间同位置元素一一对应运算。

 
例2、{1,2,3,4}*{4,5,6}——将{4,5,6}自动随大数组尺寸变化为{4,5,6,#N/A},再执行同向同尺寸一维数组间同位置元素一一对应运算。
例3、{1;2;3}*{4,5,6,7,8}——对于arry1来说,arry2的列方向是大尺寸,反之对于arry2来说,arry1的行方向是大尺寸,因此分别变化为:{1,1,1,1,1;2,2,2,2,2;3,3,3,3,3}*{4,5,6,7,8;4,5,6,7,8;4,5,6,7,8},再执行二维数组间同位置元素一一对应运算。

 
例4、{1,2,3}*{1,2,3,4;5,6,7,8}——将{1,2,3}变为{1,2,3,#N/A;1,2,3,#N/A}再执行二维数组间同位置元素一一对应运算。
例5、{1,2;3,4}*{1,2,3;4,5,6;7,8,9}将{1,2;3,4}变为{1,2,#N/A;3,4,#N/A;#N/A,#N/A,#N/A},再执行二维数组间同位置元素一一对应运算。

 

也就是说数组之间都可以看成二维(一维数组可以看成二维的其中一维尺寸为1),把尺寸统一了,同方向上尺寸不足部分用#N/A填补,不同方向上的则复制小尺寸数组,不足部分也用#N/A填补。

这种理解方式,比较容易记。
23楼
gouweicao78
前面阐述的是数组之间的直接运算,比如直接比较、文本合并、直接四则运算等。有些数组运算,是通过函数完成的,比如MMULT函数对于arry1、arry2的尺寸要求和运算规则与上面则不同,这是由于函数自身的原理不同,但本帖不准备说这些。

把1楼的常量数组,把元素都放在单元格中可以得到同样的结果,比如:{1;2;3}*{4,5,6,7}可以看为A1:A3*B1:E1,等等。
之所以选择常量数组来作例子,是因为常量数组的表述仅到二维。而单元格区域(也可以算是数组的一种存在方式),则可能存在多维引用的情况,反而不利理清思路。

从上面这些例子看,数组运算要注意几个重要特性:
1、对数组的方向、尺寸的要求:超尺寸的部分是不被接受的。
2、元素的位置对应关系:“数组”一词在繁体版中称为“阵列”,个人觉得更有这种位置关系的味道。
3、数组运算在于“分别”,而不似SUM(A1:A3)或COUNT(A1:C10)之类的,一股脑儿就算个结果出来。
4、用1楼比较枯燥一点的观点来看,同向一维数组运算,结果不会因为数组叠加多出其它的维度来,而异向一维数组的运算可以叠加出二维的结果。用2楼的数组尺寸自适应观点来看,也可以视为:为了运算,先自身变身多出其它维度来,再运算。
总之,常量数组的维度止于二维。


单元格区域数组的运算中,所有一维、二维的运算都与常量数组有相同情况,但是对于引用函数返回的单元格引用,则可以因为参数是数组产生叠加,返回超过二维的多维引用(另帖阐述)。
24楼
meiokok
新人来了,慢慢消化学习
25楼
flower8
目前初级水平   正准备偏向学习数组和VBA  也是通过楼主的博客来这里(其实以前来过,但是没注册)的。多谢!
26楼
Cowisen
http://www.exceltip.net/thread-3498-1-1.html

楼主写得太精彩了,我也学习了。
但有一疑问,在二维数组之间运算中,如下
例:{1,2;3,4}*{1,2,3;4,5,6;7,8,9}执行1*1,2*2,3*4,4*4(是否应为4*5)
27楼
gouweicao78
数组之间的运算关键词:分别  对应
土一点说“各回各家,各找各妈”。
28楼
sam.tan
虽复杂点,但得好好学习.
29楼
lrlxxqxa
“各回各家,各找各妈”,很形象的比喻
30楼
wangqilong1980
非常好用,谢谢版主。
31楼
200240
学习了,印象有深了一些
32楼
猪制将军
收藏学习了            
33楼
ludenic
it's very useful for me, thanks a lot.
34楼
shenlong2006
对数组总感觉若即若离,杀千刀的微软什么时候能公布源代码就好了
35楼
尐_Oo超。超
数组的运算规则跟矩阵不一样么?

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap