我有n个组,每个组有m个维数为d的向量。这些向量用d*m*n矩阵a表示。
我有n个维数为d的向量,用d*n矩阵b表示
现在我想用组I中的所有m个向量减去B中对应的向量I(我对所有I = 1,…,n都这样做)。
可以简单地这样做:
C = zeros(size(A));
for i = 1:n
for j = 1:m
C(:,j,i) = A(:,j,i) - B(:,i);
end
end
然而,由于循环,这是相当慢的。谁能告诉我一个快速的方法?
提前感谢您的帮助
完美理由 bsxfun
-
C = bsxfun(@minus,A,permute(B,[1 3 2]))
试一试:
B = repmat(reshape(B,[d 1 n]),[1 m 1]);
C = A - B;
编辑
Divakar的解决方案更快。d=50, m=75, n=100;平均时间如下:
Nesbit's - 0.0165 s
Divakar's - 0.0013 s