如何在 Excel 中向量化和取消向量化?

How to Vectorize and Unvectorize in Excel?

假设一个 Excel 文件逐行向量化了 2×2 对称矩阵,如下所示:

line A: element11 B: element22 C: element12=element21 D: DETERMINANT
1 2 3 0 6
2 5 7 0 35
3 11 13 0 143

因此,DETERMINANT 列的第一个值可以从矩阵 {2 0,0 3} 计算,第二个值可以从矩阵 {5 0,0 7} 计算,依此类推。 D1 值可以通过 =MDETERM(IF(A1:B1=TRANSPOSE(A1:B1),A1:B1,C1)) 直接计算,而不是重塑 A1:C1 值,因为 IF 实际上可以将 A1:C1 值重塑为感兴趣的对角矩阵。

重点在于,在Excel中,MDETERM等矩阵函数直接需要矩阵,而数据中的矩阵是向量化后逐行存储的。不幸的是,上面的 IF 解决方案只能重塑 2×2 对称矩阵,并且既不能处理非对称矩阵,也不能处理具有两个以上非对角线元素的矩阵。我们是否有比图示的 IF 方法更通用的解向量化矩阵的其他解决方案?

此外,我也对 Excel 中的向量化矩阵感兴趣;例如,A1:C1 中的矩阵可以在 D1:G1 区域中进行整形、反转和恢复。感谢您的帮助!

我想你的意思可能是

=IF(COLUMN(A1:B1)=TRANSPOSE(COLUMN(A1:B1)),A1:B1,C1)

但是你当然可以扩展这个想法。假设您在 A1:D1 中有对称 4X4 矩阵的对角线元素,在 E1:J1 中有非对角线元素。

那么你可以使用

=IF(ROW(A1:D4)=COLUMN(A1:D4),INDEX(A1:J1,ROW(A1:D4)),
IF(ROW(A1:D4)<COLUMN(A1:D4),INDEX(E1:J1,(ROW(A1:D4)-1)*4+COLUMN(A1:D4)-ROW(A1:D4)*(ROW(A1:D4)+1)/2),
INDEX(E1:J1,(COLUMN(A1:D4)-1)*4+ROW(A1:D4)-COLUMN(A1:D4)*(COLUMN(A1:D4)+1)/2)))

使用 Excel 365 Let 函数更通用:

=LET(N,4,mat,A1:INDEX(A1:Z26,N,N),
IF(ROW(mat)=COLUMN(mat),
INDEX(1:1,ROW(mat)),
IF(ROW(mat)<COLUMN(mat),
INDEX(1:1,(ROW(mat)-1)*N+COLUMN(mat)-ROW(mat)*(ROW(mat)+1)/2+N),
INDEX(1:1,(COLUMN(mat)-1)*N+ROW(mat)-COLUMN(mat)*(COLUMN(mat)+1)/2+N))))