Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

search multiple results for multiple conditions

1 visualización (últimos 30 días)
K VdB
K VdB el 4 de Ag. de 2017
Cerrada: MATLAB Answer Bot el 20 de Ag. de 2021
THE CONTEXT:
I have a set of points in a virtual 2D space. Every point has its own x and y coordinate in space.
P = [1,2 ; 2 5; 4 6; 7 8; ...] % first column are x coordinates and second column are y coordinates
If I want to find the point that is closest to the first one [1,2] I can find the distance between the first point an the other points:
dis = sqrt((P(:,1)-1).^2 + (P(:,2)-2).^2)
dis = [0 ; 3.1623 ; 5 ; 8.4853 ; ...]
if I then search for the second smallest value in 'dis' I know which point is closest to the first point
THE QUESTION:
To generate the closest point for every point I can use a for loop
for i=1:length(P)
dis = sqrt((P(:,1)-P(i,1).^2 + (P(:,2)-P(i,2).^2);
index = secondsmallest(dis) % find index of second smallest value somehow
P_indices(i) = index; % store index in an array'
end
Is there a way to find these indices without using a for loop?
.
Kind regards
Kjartan

Respuestas (3)

Star Strider
Star Strider el 4 de Ag. de 2017
I would use the pdist (link) function. You can use ordinary matrix indexing to find the indices of the various values. Also see the sort (link) function, as well as the functions linked in and at the end of the documentation pages.

dpb
dpb el 4 de Ag. de 2017

Jan
Jan el 4 de Ag. de 2017
Editada: Jan el 4 de Ag. de 2017
for i=1:length(P)
dis2 = (P(:,1) - P(i,1).^2 + (P(:,2) - P(i,2).^2; % Omit SQRT() to save time
index = secondsmallest(dis2); % find index of second smallest value somehow
P_indices(i) = index; % store index in an array'
end
function k = secondsmallest(x)
[~, k] = min(x);
x(k) = Inf;
[~, k] = min(x);
end
This is faster than sorting the complete vector.
Be sure that P_indices is pre-allocated before the loop.

La pregunta está cerrada.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by