euclidean distance calculation for values from excel sheet

sir, I have values in an excel sheet, which contains 60x3 values, they are x,y,z cordinates for all the 60 points.Now I need to find out the distance : |d(i)|=sqrt((x(k)-x(j))^2+(y(k)-y(j))^2+(z(k)-z(j)^2)), where i=1:60 , j,k are end points of the line segment under consideration, i.e., between these 60 points line segments are considered, for which this distance we are calculating. So j,k can be j=1:59 and k=2:60..
Can you please help me with the code...

22 Comments

Please ask more precise: Why do you want to do this in Matlab and not in Excel directly? Are you able to import the file already or is this a part of the problem. Did you try to solve this by simple loops already? What did you try at all? Which problems occurred?
I have all the values, i.e.,60x3 values in excel sheet, i'll import those values into matlab using xlsread. for i=1:60 for j=1:59 for k=2:60 |d(i)|=sqrt((x(k)-x(j))^2+(y(k)-y(j))^2+(z(k)-z(j)^2)),
I've to find out this distance,. from these 60 points i've to find out the distance between these 60 points, for which the above formula has to be used.. When i read values from excel sheet how will i assign that 1st whole coloumn's values are x values and 2nd coloumn values are y values and 3rd coloumn values are z values.
Use pdist and it does the assumption for you automagically. If you don't have the Stat Toolbox still just use x(:,1), x(:,2), x(:,3) to refer to the three columns.
See the "Getting Started" section in the documentation and work thru the examples given on how Matlab works with arrays and the colon (:) operator...
When i am using pdist, clear all; close all; clc; Data = xlsread('A_ed.xls'); D = pdist(Data,'euclidean'); xlswrite('A_norm.xlsx',D,'sheet1');
The values getting copied into excel sheet as 1 single row. I am not able to understand it.. The values are starting from A to BPB in excel sheet
Can you please tell me how to angle vectors between two line segments in 3D space ,i.e., each point will be having x,y,z cordinates....
What does that mean? What does it mean "to angle" a line segment with 2 endpoints in 3D space? Do you want the Euler angles? To you want to change the orientation (Euler angles)? Why are there two line segments? Do you somehow want some kind of angles that describe the location and orientation differences between the two? If so, why? What's the use case?
pdist returns a 1D vector per the doc. See
doc squareform
for converting that into a symmetric square array.
I don't understand the second query, sorry...
Okay thanq for helping me find out euclidean distance. My second query was that, how can i find out the angle between any two lines using the cos inverse, for these lines their end points are only known.
when i used pdist and when i calculated manually, the values were not matching There was a lot of variation in the values obtained. I calculated using the formula: d(i)=sqrt((x(k)-x(j))^2+(y(k)-y(j))^2+(z(k)-z(j)^2)). Can you please help me..
"when i used pdist and when i calculated manually, the values were not matching..."
>> xyz=rand(3); % some random data sample coordinates
>> squareform(pdist(xyz))
ans =
0 0.2374 0.2435
0.2374 0 0.2397
0.2435 0.2397 0
>> del=diff(xyz); % compute differences vertically 2-1, 3-2
>> sqrt(dot(del,del,2)) % euclidean distance between those two
ans =
0.2374
0.2397
>>
NB: This is same as 1-2 and 2-3 from pdist; you can confirm that 1-3 is same as well.
Oh, and on your question re: the angles; I see nothing better than writing an anonymous function and using nchoosek(1:length(x),2) to generate the list of pairwise indices of the two vectors pairwise as inputs to evaluate the expression. You can write
theta=acos(sqrt(dot(a,b)/{|a||b|}))
in terms of the two indices for vectors a and b to compute the expression.
can u please tell me how can i read each row into x,y,z values and then use them in the above mentioned code. after calculating this euclidean distance i need to find the angle between the distances connecting these 60 points?
Just use the indices of the arrays...if the data are in X, then X(i,:) is point i, so X(i,1), X(i,2), X(i,3) --> [xi,yx,zi], respectively.
how can the same be done using pdist for a 60x3 values from two sheets? i.e., two excel sheets having 60x3 values, i need to calculate euclidean distance between values of two sheets
Depends on what you want as compare whom to whom...basically, read the two sheets into different arrays and then confound them together in the desired arrangement that satisfies pdist for the desired comparison. What isn't clear is whether you've got a position-by-position between the two or the "all possible comparisons" case.
Actually I have 60x3 values in two different excel sheets, I need to calculate the euclidean distance between these two sheets. I want euclidean distance between A1.xlsx and A2.xlsx sheets
sheet0= xlsread('N.xlsx');
sheet1= xlsread('A.xlsx');
D = pdist2(sheet0,sheet1,'euclidean');
is the code which i tried, which is giving an error,
??? Attempt to execute SCRIPT pdist2 as a function:
D:\pdist2.m
can u please help sort it out..
Looks like you've got a script pdist2 that's aliasing the TMW-supplied one. What does
which pdist2
show?
I didn't understand what you meant by which pdist2? I've matlab r2010a installed.
Type it in at the command line...see
doc which
It'll show you which is the referenced pdist2 actually being called and in your above error the string "D:\pdist2.m" certainly makes it appear as if the problem is there is a script called PDIST2 which, if really so, is aliasing the TMW-supplied PDIST2 that you're trying to use.
The likely thing is that you named your top-level script pdist2 without realizing there is a builtin function of that name; if so rename that script to something else. Since Matlab is case-sensitive, use "PDIST2.m" or "pDist2.m" or some other name entirely, but anything but "pdist2.m".
PS:
"anything" above of course means "anything except pdis2.m or any other builtin function*.

Sign in to comment.

 Accepted Answer

More Answers (0)

Asked:

on 26 Mar 2015

Edited:

dpb
on 21 Apr 2015

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!