Matlab序列乘法三维矩阵

0ve6wy6x  于 2022-12-29  发布在  Matlab
关注(0)|答案(1)|浏览(213)

我有一个NxNxM矩阵我想把它们相乘得到一个NxN矩阵,就像

A(:,:,1) * A(:,:,2) * A(:,:,3) * ... A(:,:,M)

是否有函数可以完成这个操作?或者我应该使用for循环?

pkln4tw6

pkln4tw61#

我能想到的最好方法是使用普通的Matlab代码:

out = A(:,:,1);
for jj = 2:size(A,3)
    out = out*A(:,:,jj);
end

或者,在Symbolic Math Toolbox的帮助下,fold(help here)函数可以提供帮助:

res = fold(@mtimes, squeeze( num2cell(A, [1,2]) ))

其中,num2cell与附加参数[1,2]将3D矩阵转换为包含各个页面的单元阵列,squeeze去除单个维度。@mtimes是负责矩阵乘法的内置函数的句柄。
我没有检查过,但是我怀疑基于fold的方法会比普通的for循环占用更多的内存,而且总体上要慢,因为它涉及到到到单元格数组的转换,当然,它需要一个工具箱。

相关问题