MATLAB Answers

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

7 views (last 30 days)
Paramonte
Paramonte on 3 Feb 2020
Commented: Paramonte on 3 Feb 2020
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

Sign in to comment.

Accepted Answer

Steven Lord
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
Paramonte
Paramonte on 3 Feb 2020
I must thak Image Analist and Steven Lord for your time and effot.
Steven reply worked perfectely.
many thanks indeed

Sign in to comment.

More Answers (2)

Paramonte
Paramonte on 3 Feb 2020
Thakn you for your reply.
Yes I want to keep the 4.1 since the next valu is 5 so, 5-4.1=0.9 which is over 0.1

Image Analyst
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

Sign in to comment.

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!