Borrar filtros
Borrar filtros

Find datapoints a specified distance apart in matrix using while loop

1 visualización (últimos 30 días)
I have some data with positive integers (to_pos). I want to find and extract into a second matrix (spacedCrossPoints) datapoints that are a minimum of 30 from each other. So my desired output would be: 1214,2263,2320,8262,8292....
Here is my not working code so far:
gapBetweenCrosses = 30;
for cross = 2:length(t0_pos)-1;
i = cross;
if (((t0_pos(cross+1))-(t0_pos(i))) >= gapBetweenCrosses)% && (cross < ((length(t0_pos))-30)); %if gap between row greater than or equal to 30(s)
spacedCrossPoints(end+1,1) = t0_pos(cross+1); %insert values of crosspoints into matrix
elseif ((t0_pos(cross+1))) - (t0_pos(i)) < gapBetweenCrosses %&& cross < (length(t0_pos))-30; %if gap is less than 30. skips
%jump = 30-(((t0_pos(cross+1))) - (t0_pos(cross))); %calculate jump as difference between 30 and different between rows
while ((t0_pos(cross+1))) - (t0_pos(i)) < gapBetweenCrosses
cross = cross+1;
%spacedCrossPoints(end+1,1) = t0_pos(cross+1); %notes new value 30 past last value %NEED TO MAKE CROSS NOT EXCEED length t0_pos
end
end
cross = cross+1;
end
end
  2 comentarios
Dyuman Joshi
Dyuman Joshi el 27 de Mzo. de 2023
"I want to find and extract into a second matrix (spacedCrossPoints) datapoints that are a minimum of 30 from each other."
How does the above statement relate to this - "So my desired output would be: 1214,2263,2320,8262,8292...."
Do you want to obtain all the pair of points whose difference is >= gap?
Emu
Emu el 27 de Mzo. de 2023
In the attached dataset the datapoints that are 30 or more points from each other are as specified: 1214,2263,2320,8262,8292... They are not pairs.

Iniciar sesión para comentar.

Respuesta aceptada

Dyuman Joshi
Dyuman Joshi el 27 de Mzo. de 2023
Editada: Dyuman Joshi el 27 de Mzo. de 2023
Points which are >= 30 than the previous point starting with the 1st point -
load t0_pos.mat
gap=30;
k=1;
y=false(size(t0_pos));
y(k)=true;
%loop
while k<numel(t0_pos)
k=find(t0_pos - t0_pos(k) >= gap, 1);
y(k)=true;
end
out = t0_pos(y)'
out = 1×34
1214 2263 2320 8262 8292 8322 8434 8480 9014 9090 9149 9179 9215 14848 14904 15106 15149 15207 15372 15443 16330 16671 16708 20532 20590 20757 20809 23325 23355 23385
  3 comentarios
Dyuman Joshi
Dyuman Joshi el 27 de Mzo. de 2023
I have edited my answer, please check again.
Emu
Emu el 27 de Mzo. de 2023
that is amazing :) thank you so much !!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Productos


Versión

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by