Matlab中如何按顺序相乘N×N×M三维矩阵?有无内置函数?
三维矩阵切片顺序相乘的实现方案
直接用for循环(最实用)
这是最简单直观的方式,初始化结果为单位矩阵,依次遍历每个二维切片相乘即可:
N = size(A, 1); result = eye(N); for k = 1:size(A, 3) result = result * A(:,:,k); end
别担心循环效率,MATLAB的JIT编译器会自动优化这类矩阵运算循环,实际跑起来速度并不慢,尤其是M规模不是极端大的时候,完全够用。
无显式循环的替代方式(可读性一般)
MATLAB没有专门的内置函数直接完成这个顺序矩阵乘法,但可以通过arrayfun配合累积逻辑实现,不过本质和循环没差,可读性还不如直接写循环:
N = size(A, 1); result = eye(N); result = arrayfun(@(k) result * A(:,:,k), 1:size(A,3), 'UniformOutput', false); result = result{end};
这种写法没必要特意用,除非你执着于“无循环”代码。
特殊场景下的张量收缩(不推荐通用场景)
如果你的所有切片矩阵有特殊性质(比如都是对角矩阵、可同时对角化),可以尝试用张量收缩的方法计算,但这种场景非常少见,通用情况下完全没必要折腾。
总结:直接写for循环是最优选择,逻辑清晰、效率也没问题,MATLAB没有专门的内置函数一步搞定这个顺序相乘操作。
内容的提问来源于stack exchange,提问作者Shika93
相关产品推荐
相关产品推荐

