Matlab:通过向量列表减去3D数组中的向量



我有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

相关内容

  • 没有找到相关文章

最新更新