Newbie: Euclidean distance of a matrix??
2 次查看(过去 30 天)
显示 更早的评论
hello all, i am new to use matlab so guys i need ur help in this regards. if i have a mxn matrix e.g
X=[5 3 1; 2 5 6; 1 3 2]
i would like to compute the distance matrix for this given matrix as
D= [d11 d12 d13; d21 d22 d23; d31 d32 d33]
where d(ij)= euclidean distance between row i and j.
in my thinking i applied a for loop like this
% for r=1:rows
% for c=1:cols
% for k=1:3
% d(r,c)= sqrt(sum(a(r,k)-a(c,k)).^2);
% end
% end
% end
but this thing doen't gives the desired result. can some one please correct me and also it would b nice if it would be not only for 3x3 matrix but for any mxn matrix..
thanks alot in advance i wish a nice smilling day
0 个评论
采纳的回答
Sean de Wolski
2012-4-23
Following your rules:
X=[5 3 1; 2 5 6; 1 3 2]; %sample matrix
myEdist = squeeze(sqrt(sum(bsxfun(@minus,X,reshape(X',1,size(X,2),size(X,1))).^2,2))) %Engine
Take the difference of elements in each combination of rows. Square it, sum it, root it, and squeeze it!.
更多回答(1 个)
Thomas
2012-4-23
Dunno if this is what you need:
X=[5 3 1; 2 5 6; 1 3 2]
for i=1:length(X)
dist(i,:)=pdist(X(:,i),'euclidean')';
end
dist
EDIT
All you need is
X=[5 3 1; 2 5 6; 1 3 2]
pdist(X)
or if you need a 3x3 matrix of output:
for i=1:length(X)
Y=circshift(X,i+1);
q(i,:)=pdist(Y);
q(i,i)=0;
end
q
Using Teja's comment might be the easiest:
X=[5 3 1; 2 5 6; 1 3 2]
squareform(pdist(X));
2 个评论
Teja Muppirala
2012-4-23
X=[5 3 1; 2 5 6; 1 3 2]
squareform(pdist(X))
will convert it into the 3x3 matrix
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Mathematics and Optimization 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!