我们有例如这些矩阵:
M = rand(30,45,4);
U = rand(4,4);
在第一步中,我想将矩阵M
的每个元素与U
矩阵相乘,这是一个4元素向量。这将导致新的M1
矩阵,其元素也是1x4
。例如,M1(1,1,:) = M(1,1,:)*U;
对于特定示例,这在矩阵维度中对应于1x4 = (1x4)(4x4)
。整个M1
矩阵与M
具有相同的维度。
在第二步中,M1
必须以相同的方式与M'
相乘,并获得最终的F
矩阵,该矩阵是具有1D元素的2D矩阵。例如,F(1,1) = M1(1,1,:)*M(1,1,:)';
换句话说,F
矩阵的每个元素都是,其中是1x4
矩阵的M
个元素。
附加示例:
M = rand(600, 800, 4);
U = rand(4,4);
F = nan(size(M,1),size(M,2));
for i=1:size(M,1)*size(M,2)
[r,c]=ind2sub(size(M),i);
F(i) = squeeze(M(r,c,:))'*U*squeeze(M(r,c,:));
end
Elapsed time is 58.627296 seconds.
@Luis Mendo回答:
tic
Mr = reshape(M, [], size(M,3));
result = reshape(sum(Mr*U.*Mr,2), size(M,1), size(M,2));
toc
Elapsed time is 0.062898 seconds.
请问有人建议不使用for循环的方法吗?
谢谢你的时间!
PS: Matlab 2013a 64x,Intel(R)Core(TM)i3 CPU 2.40 GHz,4GB内存
答案 0 :(得分:1)
我仍然不确定我是否理解正确,但也许这就是你想要的:
Mr = reshape(M, [], size(M,4));
result = reshape(sum(Mr*U.*Mr,2), size(M,1), size(M,2));