Excel中如何用动态数组函数将列重塑为矩阵供MMULT计算
Excel内存重塑列向量参与矩阵乘法实现方案
无需在工作表存储重塑后的中间矩阵,仅保留原始数据列即可直接完成MMULT矩阵运算,适配支持动态数组的Excel 365/2021及以上版本,全程计算在公式内存层完成。
核心实现方法
使用Excel原生动态数组函数WRAPROWS/WRAPCOLS直接在内存中完成一维列向量到二维矩阵的转换,转换结果可直接作为MMULT的参数传入,不需要落地到工作表单元格。
WRAPROWS(数据区域, 目标矩阵列数):按行优先顺序,将一维数据拆分为指定列数的二维内存数组WRAPCOLS(数据区域, 目标矩阵行数):按列优先顺序,将一维数据拆分为指定行数的二维内存数组
场景1:计算列向量重塑方阵的平方
假设原始数据存放在A1:A9共9个单元格,需要重塑为3×3方阵后计算矩阵平方(即矩阵自乘),直接在结果输出单元格输入以下公式即可,输入后按回车会自动溢出所有计算结果:
=MMULT(WRAPROWS(A1:A9,3),WRAPROWS(A1:A9,3))
场景2:同列数据拆分两个矩阵做乘法
如果需要把同一列的前后段数据分别重塑为两个维度匹配的矩阵做乘法,比如A1:A6重塑为2×3矩阵,A7:A12重塑为3×2矩阵,可配合LET函数简化公式,避免重复写范围:
=LET( all_data, A1:A12, mat_a, WRAPROWS(TAKE(all_data,6),3), mat_b, WRAPROWS(DROP(all_data,6),2), MMULT(mat_a, mat_b) )
低版本兼容方案
如果使用Excel 2019及更早无WRAPROWS/WRAPCOLS的版本,可通过INDEX+SEQUENCE构造内存矩阵实现同等效果,以3×3方阵自乘为例,公式如下:
=MMULT(INDEX(A1:A9,SEQUENCE(3,3)),INDEX(A1:A9,SEQUENCE(3,3)))
注意事项
- 禁止直接在大括号
{}数组常量中写单元格引用,该语法仅支持硬编码常量值,引用单元格会直接返回计算错误,内存数组函数返回的结果不存在这个兼容问题 - 传统向量转矩阵方案需要在工作表单独占用区域存放重塑后的中间矩阵,会产生冗余数据存储,本方案全程无中间数据落地,工作表仅需保留原始输入列即可
- 请保证原始数据的总长度和目标矩阵维度匹配(即矩阵1列数=矩阵2行数,数据总个数=矩阵元素数之和),否则公式会返回维度不匹配的错误
- 目标实现效果参考:

内容的提问来源于stack exchange,提问作者Per
相关产品推荐
相关产品推荐

