簡體   English   中英

Matlab:通過矢量列表減去3D數組中的矢量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM