Eucliedan Distances In two Arrays
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Osita Onyejekwe
el 18 de Nov. de 2016
Respondida: Greg Dionne
el 18 de Nov. de 2016
I have an array of (X-Y) Coordinates,
Observed_Signal_Positive_Inflection_Points_Coordinates =
0.1040 -0.0432
0.2090 -0.0264
0.3140 -0.0096
0.4180 -0.0527
0.5230 -0.0359
0.6280 -0.0191
0.7330 -0.0023
0.8370 -0.0455
0.9420 -0.0287
Using each of the 9 coordinates I want to find its distances from a second array of (X-Y) coordinates (D = sqrt(X^2+Y^2))
Positive_Inflection_Points_Coordinates_denoised =
0.0020 0.8093
0.0040 0.7637
0.0070 0.7494
0.0130 0.4747
0.0250 0.6108
0.0260 0.6134
0.0980 -0.1331
0.1000 0.0740
0.1030 0.1959
0.1880 -0.5077
0.1980 -0.2024
0.2020 0.1651
0.2060 0.2103
0.2090 0.3228
0.2120 0.4626
0.2970 -0.5625
0.3050 -0.3444
0.3130 -0.0907
0.3150 0.0769
0.3200 0.2399
0.3950 -0.7348
0.4000 -0.6530
0.4130 -0.2682
0.4150 -0.1705
0.4170 -0.0756
0.4190 0.0999
0.4200 0.1384
0.4220 0.2145
0.4260 0.4140
0.5010 -0.7668
0.5150 -0.4427
0.5190 -0.2756
0.5240 -0.0631
0.5260 0.0475
0.5290 0.1839
0.6030 -0.5451
0.6080 -0.5282
0.6260 -0.0955
0.6280 0.0680
0.6320 0.2191
0.6530 0.7563
0.7240 -0.4235
0.7300 -0.1596
0.7330 -0.0320
0.7350 0.0883
0.7380 0.2280
0.8310 -0.2144
0.8320 -0.1546
0.8340 -0.0583
0.8600 0.6336
0.8620 0.6169
0.9320 -0.5955
0.9330 -0.5314
0.9340 -0.4676
0.9370 -0.2955
0.9410 -0.1334
0.9430 0.1233
0.9460 0.1775
Using each coordinate from the first, I want to find the minimal Euclidean Distance from the second set. How do I do this given that both arrays are of different length? Basically, I will have a final set of X-Y Coordinates (9 in total) that minimize the euclidean distance based on testing each of the first coordinates against every single set in the second.
0 comentarios
Respuesta aceptada
Jan
el 18 de Nov. de 2016
Editada: Jan
el 18 de Nov. de 2016
There are more sophisticated solutions, but what about a simple loop?
X = Observed_Signal_Positive_Inflection_Points_Coordinates;
Y = Positive_Inflection_Points_Coordinates_denoised;
nX = size(X, 1);
Result = zeros(1, nX)
for k = 1:nX
tmp = (X(k, 1) - Y(:, 1)) .^ 2 + (X(k, 2) - Y(:, 2)) .^ 2;
[dummy, Result(k)] = min(tmp, [], 1);
end
Or in R2016b:
tmp = sum((X(k, :) - Y) .^ 2, 2);
Note: You can omit the expensive sqrt(), because it does not change the property of beeing the minimum.
2 comentarios
dpb
el 18 de Nov. de 2016
That's what the Result above is for each of the values in X.
Or see alternate solution...which also returns them as the second optional output.
Más respuestas (2)
dpb
el 18 de Nov. de 2016
Given first/second sets are X,Y, respectively,
[D,I]=pdist2(Y,X,'euclid','smallest',1); % doc pdist2 for details
0 comentarios
Greg Dionne
el 18 de Nov. de 2016
You can also use findsignal if you have a recent copy of the Signal Processing Toolbox, which has some additional normalization and scaling options. (See also example using findsignal)
Even so, I think you'll want to massage your data a little bit to get a good result. The first column of both your observed and denoised move fairly linearly from 0 to 1; the second column looks like it is centered at 0.03 in your observed data, and centered at the origin in your denoised.
Was this an attempt at normalization?
0 comentarios
Ver también
Categorías
Más información sobre Dimensionality Reduction and Feature Extraction en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!