# Detecting values in a vector that are different but very close to each other

12 views (last 30 days)

Show older comments

Hello there:

I have a t vector (time, increasing values) like this:

t=[ 1 1.1 2 3 3.1 4.1 5 6 7.1 7.2]

to which corresponds y values

y=[ 10 12 10 9 1 12 12 4 9 12 ]

I would like to remove in x the values whose difference to the next one is <= 0.1, so I get a

t_new=[ 1 2 3 4.1 5 6 7.1] and then to make a corrspondenece to the new y, in a way that the y values correspondent to the similar x values are added, so:

y_new=[10+12 10 9+1 12 12 4 9+12]

Thanks in advance!!

Regards

##### 3 Comments

J. Alex Lee
on 3 Feb 2020

Then what is the rationale for rounding the 7.1 down to 7?

Might want to move your comment up to this thread

### Accepted Answer

Steven Lord
on 3 Feb 2020

Use uniquetol to unique-ify the data with a tolerance. uniquetol can return a vector of indices that indicate to which of the unique values each original value corresponds. Then use accumarray to accumulate the corresponding values of the second vector together.

t=[ 1 1.1 2 3 3.1 4.1 5 6 7.1 7.2];

y=[ 10 12 10 9 1 12 12 4 9 12 ];

[t2, ~, ind2] = uniquetol(t, 0.11);

ynew = accumarray(ind2, y);

uniqueItemsWithValues = [t2.', ynew]

##### 2 Comments

J. Alex Lee
on 3 Feb 2020

### More Answers (2)

Image Analyst
on 3 Feb 2020

This works:

t=[ 1 1.1 2 3 3.1 4.1 5 6 7.1 7.2]

y=[ 10 12 10 9 1 12 12 4 9 12 ]

dt = diff(t)

bigDiff = dt >= 0.11 % Change according to what you think is a big enough difference.

badIndexes = find(~bigDiff) + 1

goodIndexes = [1, find(bigDiff) + 1]

yCopy = y;

yCopy(badIndexes - 1) = yCopy(badIndexes - 1) + yCopy(badIndexes)

t_new = t(goodIndexes)

y_new = yCopy(goodIndexes)

Adapt as needed.

##### 4 Comments

Image Analyst
on 3 Feb 2020

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!