我有一个包含多个变量的Matlab表。列T
中的每个单元格都包含3-by-3
矩阵。列A
的每一行都包含1-by-3
矩阵。 (如this file中所述。)
我想在表中创建一个新列C
,方法是将A
中的每个矩阵与T
中的相应矩阵相乘,得到C(i,:) = A(i,:)*T{i}
。我怎样才能有效地做到这一点?
答案 0 :(得分:2)
for
K.C = zeros(size(K.A));
for ii = 1:size(K.A,1)
K.C(ii,:) = K.A(ii,:)*K.T{ii};
end
rowfun
K.C = cell2mat(rowfun(@(T,A) A*T{1},K,'InputVariables',{'T','A'},'Outputformat','cell'));
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;
cellfun
K.C = cell2mat(cellfun(@mtimes, num2cell(K.A, 2), K.T, 'UniformOutput', false));
cellfun
方法比我机器上的for
循环赢得100倍。