[英]Matlab: subtract vectors in a 3D array by a list of vectors
我有n组,每组有m个维数为d的向量。 这些由ad * m * n矩阵A表示。
我有n个维数为d的向量,由ad * n矩阵B表示。
现在我想通过B中相应的向量i减去组i中的所有m个向量(我对所有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的解决方案更快。 对于100次运行,d = 50; m = 75; n = 100; 平均时间如下:
Nesbit的 - .0165s
迪瓦卡的 - .0013s
我的 - .0023s
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.