MATLAB Answers

Find set of all adjacent points that are close to each other

40 views (last 30 days)
Paul Hoffrichter
Paul Hoffrichter on 5 Jun 2020 at 19:28
Edited: Paul Hoffrichter on 6 Jun 2020 at 1:03
I would like to find in Y[n] a set of adjacent points that are close to each other, but I don't get all the desired points. For example.
Y = [ 1.1 1.12 9.2 8.3 8.295 8.292 4.1 4.12 4.19];
dY_idx = find(abs(diff(Y)) < 0.022);
Y_adj_close = Y(dY_idx)
This code results in:
Y_adj_close =
1.1000 8.3000 8.2950 4.1000
But I would like the result to be:
Y_adj_close =
1.1000 1.1200 8.3000 8.2950 8.2920 4.1000 4.12
How can I get the desired result? (Note: I probably could also do a Y = fliplr(Y) followed by a second round and then combine results to get all the unique points, but that would be two sets of operations on a large vector. Hoping for a faster solution.)

  0 Comments

Sign in to comment.

Accepted Answer

Tommy
Tommy on 5 Jun 2020 at 21:48
How about this?
logidx = abs(diff(Y)) < 0.022;
Y_adj_close = Y([logidx 0] | [0 logidx]);
Y_adj_close =
1.1000 1.1200 8.3000 8.2950 8.2920 4.1000 4.1200

  3 Comments

Paul Hoffrichter
Paul Hoffrichter on 5 Jun 2020 at 22:12
Thank you very much. I see that a zero at the beginning shifts the logical 1's over to get the last adjacent point of each close set of points; and the or'ing keeps the original logidx finding. I appreciate your help.
Paul Hoffrichter
Paul Hoffrichter on 6 Jun 2020 at 1:01
My new question deals with my need to keep dimension of x and y the same. I forgot to mention that in this question. I used your answer here to work out an answer that works. Just wondering whether it can be modified to perform better.
Just using plot in the question to ensure dimensions match, and provide a quick sanity check.

Sign in to comment.

More Answers (0)


Translated by