You are now following this question
- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.
euclidean distance calculation for values from excel sheet
4 views (last 30 days)
Show older comments
krishnasri
on 26 Mar 2015
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
Jan
on 26 Mar 2015
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?
krishnasri
on 27 Mar 2015
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.
dpb
on 27 Mar 2015
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...
krishnasri
on 28 Mar 2015
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
krishnasri
on 30 Mar 2015
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....
Image Analyst
on 30 Mar 2015
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?
dpb
on 30 Mar 2015
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...
krishnasri
on 31 Mar 2015
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.
krishnasri
on 31 Mar 2015
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..
dpb
on 31 Mar 2015
"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.
dpb
on 31 Mar 2015
Edited: dpb
on 1 Apr 2015
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.
krishnasri
on 16 Apr 2015
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?
dpb
on 16 Apr 2015
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.
krishnasri
on 16 Apr 2015
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
dpb
on 17 Apr 2015
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.
krishnasri
on 17 Apr 2015
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
krishnasri
on 18 Apr 2015
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..
dpb
on 18 Apr 2015
Looks like you've got a script pdist2 that's aliasing the TMW-supplied one. What does
which pdist2
show?
krishnasri
on 19 Apr 2015
I didn't understand what you meant by which pdist2? I've matlab r2010a installed.
dpb
on 19 Apr 2015
Edited: dpb
on 21 Apr 2015
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*.
Accepted Answer
More Answers (0)
See Also
Categories
Find more on Gaussian Process Regression in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)