CWYAlpha

Just another WordPress.com site

Thought this was cool: Excel数据块之间的运算原理

leave a comment »


博客 » IT技术 » »

最近看到一个比较有趣的问题,Excel中以下表达式代表什么含义:

= B1:D1 * A2:A4

与想象中向量乘积不一样,此处答案是一个3×3的矩阵。在输入框选中B1:D1 * A2:A4然后按F9便能看到结果。这不光适用于表格区域,也适用于运算结果和直接输入的数据块,比如=(B1:D1>1)*{1;2;3}。原理何在?

事实上,Excel在进行区域之间的计算时,均为按位置运算,包括比较、符号运算,包括乘法。当A为M×N的区域(此处区域可以是一个Excel表格区域,也可以是计算得到的结果矩阵),B为X×Y的区域,那么在计算A×B时,A和B都先扩充为max(M, X)×max(N, Y)的矩阵,然后按位置相乘,得到的结果为一个max(M, X)×max(N, Y)的矩阵。

但需要注意的是扩充的规则。只有两种方式,N/A填充(这里N/A为一个Excel的错误类型)和重复填充。如果只有一行或者一列,则为重复填充;否则为N/A填充,即多余的格子都为N/A。

当然,这里N/A事实上不是填充出来,而是在计算过程中产生的。但最终结果一样,并且填充的方式更容易被理解,所以这里不做区分,还是按照填充的说法。

一个简单的例子为,比如{1, 2, 3} 扩充为4×5的矩阵后为以下结果:

1 2 3 N/A N/A
1 2 3 N/A N/A
1 2 3 N/A N/A
1 2 3 N/A N/A

而{1 1 1; 1 2 3}扩充为4×5的矩阵后为以下结果:

 1   1   1  N/A N/A
 1   2   3  N/A N/A
N/A N/A N/A N/A N/A
N/A N/A N/A N/A N/A

利用这种规则,可以一个公式写出九九乘法表:选中一个9×9的区域,然后输入数组公式:

{={1,2,3,4,5,6,7,8,9}*{1;2;3;4;5;6;7;8;9}}

相关文章


© zhiqiang for 阅微堂, 2012. | 链接 | 0条评论

from 阅微堂: http://zhiqiang.org/blog/it/excel-ranges-computation.html

Written by cwyalpha

8月 6, 2012 在 11:19 上午

发表在 Uncategorized

留下评论