我有一个NxNxM矩阵我想把它们相乘得到一个NxN矩阵,就像
A(:,:,1) * A(:,:,2) * A(:,:,3) * ... A(:,:,M)
是否有函数可以完成这个操作?或者我应该使用for循环?
pkln4tw61#
我能想到的最好方法是使用普通的Matlab代码:
Matlab
out = A(:,:,1); for jj = 2:size(A,3) out = out*A(:,:,jj); end
或者,在Symbolic Math Toolbox的帮助下,fold(help here)函数可以提供帮助:
Symbolic Math Toolbox
fold
res = fold(@mtimes, squeeze( num2cell(A, [1,2]) ))
其中,num2cell与附加参数[1,2]将3D矩阵转换为包含各个页面的单元阵列,squeeze去除单个维度。@mtimes是负责矩阵乘法的内置函数的句柄。我没有检查过,但是我怀疑基于fold的方法会比普通的for循环占用更多的内存,而且总体上要慢,因为它涉及到到到单元格数组的转换,当然,它需要一个工具箱。
num2cell
[1,2]
squeeze
@mtimes
for
1条答案
按热度按时间pkln4tw61#
我能想到的最好方法是使用普通的
Matlab
代码:或者,在
Symbolic Math Toolbox
的帮助下,fold
(help here)函数可以提供帮助:其中,
num2cell
与附加参数[1,2]
将3D矩阵转换为包含各个页面的单元阵列,squeeze
去除单个维度。@mtimes
是负责矩阵乘法的内置函数的句柄。我没有检查过,但是我怀疑基于
fold
的方法会比普通的for
循环占用更多的内存,而且总体上要慢,因为它涉及到到到单元格数组的转换,当然,它需要一个工具箱。