1
ベクトル化して配列の重複するセグメントにアクセスする方法はありますか? これを行う最速の方法は何ですか?ここでは、forループアレイへのベクトル化アクセス
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
ベクトル化して配列の重複するセグメントにアクセスする方法はありますか? これを行う最速の方法は何ですか?ここでは、forループアレイへのベクトル化アクセス
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