如何有效地执行大量矩阵乘法

时间:2014-12-31 14:18:02

标签: matlab

我有一个包含多个变量的Matlab表。列T中的每个单元格都包含3-by-3矩阵。列A的每一行都包含1-by-3矩阵。 (如this file中所述。) Table structure

我想在表中创建一个新列C,方法是将A中的每个矩阵与T中的相应矩阵相乘,得到C(i,:) = A(i,:)*T{i}。我怎样才能有效地做到这一点?

1 个答案:

答案 0 :(得分:2)

方法#1:for

K.C = zeros(size(K.A));
for ii = 1:size(K.A,1)
    K.C(ii,:) = K.A(ii,:)*K.T{ii};
end

方法#2:rowfun

K.C = cell2mat(rowfun(@(T,A) A*T{1},K,'InputVariables',{'T','A'},'Outputformat','cell'));

方法#3:parfor

C = zeros(size(K.A)); 
A = K.A; 
T = K.T;
parfor ii = 1:size(K.A,1)
    C(ii,:) = A(ii,:)*T{ii};
end
K.C = C;

方法#4:cellfun

K.C = cell2mat(cellfun(@mtimes, num2cell(K.A, 2), K.T, 'UniformOutput', false));

速度比较:

cellfun方法比我机器上的for循环赢得100倍。

Speed comparison