1
是否有矢量化訪問數組重疊段的方法? 或者最快的方法來做到這一點?向量化訪問數組
與循環
A=rand(5);
B=rand(10,5);
m=6;
for idx=1:m
C(idx)=sum(sum((A(:,:)-B(idx: end-(m+1-idx),:)).^2));
end
是否有矢量化訪問數組重疊段的方法? 或者最快的方法來做到這一點?向量化訪問數組
與循環
A=rand(5);
B=rand(10,5);
m=6;
for idx=1:m
C(idx)=sum(sum((A(:,:)-B(idx: end-(m+1-idx),:)).^2));
end
這裏最小的樣品是其執行矢量存取使用bsxfun
的方法,permute
& reshape
-
% Size parameters
m = size(A,1);
n = size(B,1);
% Extended version of B, i.e. "B(idx: end-(m+1-idx)+1,:)" across all iterations
B_ext = B(bsxfun(@plus,(1:m)',0:n-m),:);
% Perform broadcasted subtraction against A and finally squared summations
C = sum(sum(bsxfun(@minus,reshape(B_ext,m,n-m+1,[]),permute(A,[1,3,2])).^2,1),3)
有可能是出錯了指數,B(10 ,: )永遠不會被讀取。 – Daniel
當您的數據開始變大時,使用FFT計算相關性比直接計算快。 –
應該不是'B(idx:end-(m + 1-idx)+1,:)'而不是? – Divakar