我想從三個向量中構建一個三維矩陣,其中我將每個向量的每個元素之間的最小平方距離作爲矩陣的條目。建立一個沒有環路的3D最小二乘距離矩陣?
例如,對於3D矩陣d,
d(m,n,o)=(vec1(m)-vec2(n))^2+(vec1(m)-vec3(o))^2+(vec2(n)-vec1(o))^2
我目前正在與三做這個循環:
d=zeros(N,M,O);
for o=1:O
for n=1:N
for m=1:M
d(n,m,o)=(((t(n)-r(m))^2)+((t(n)-z(o))^2)+((r(m)-z(o))^2));
end
end
end
我的問題是,是否有做一個更快,更聰明的方式這例如對於這個我可以使用的二維版本:
%for n=1:N
% for m=1:M
% d(n,m)=(t(n)-r(m))^2;
% end
%end
d=(repmat(t(:),1,M)-repmat(r(:)',N,1)).^2; %this replaces the nested for loops from above Thanks Georg Schmitz
無論是喬治施密茨是誰來了用一種方法來使用repmat替換2d版本中的double for循環。我當然可以適應這種方法,並用循環替換我的三重循環,重複repmat方法(o)多次,但我覺得應該有一種方法來做到這一點沒有循環。
任何想法?由於
啊輝煌,我考慮使用bsxfun,但無法找出解決最大兩個參數的方法。 – user1185474 2012-02-05 15:29:19