Calculates the mean if the difference of two or more number is 1

2 Ansichten (letzte 30 Tage)
Hi all;
I want to calculate mean of numbers if their difference with its neighbor is 1 . For example, if I have a matrix:
A = [9 10 12 14 15 16 18 19 22 23 25];
For each number whose difference with the neighbors is one, their mean is calculated. So, the intended result (called as matrix B):
B [9.5 12 15 18.5 22.5 25];
I try to use:
diff(A), so we get
1 2 2 1 1 2 1 3 1 2
But, how to use this diff(A) to do an operation , so that we get the resul: B [9.5 12 15 18.5 22.5 25];
Thank you for help.

Akzeptierte Antwort

Matt Gaidica
Matt Gaidica am 8 Feb. 2021
Bearbeitet: Matt Gaidica am 8 Feb. 2021
A = [9 10 12 14 15 16 18 19 22 23 25];
idx = find(diff(A)==1);
B = mean([A(idx);A(idx+1)])
I think you have a typo above, 25 would not be in the final array:
B =
9.5000 14.5000 15.5000 18.5000 22.5000
Could also:
mv = movmean(A,2);
idx = find(diff(A)==1);
B = mv(idx+1)
  6 Kommentare
Matt Gaidica
Matt Gaidica am 8 Feb. 2021
Not my proudest code snippet, but at least you can step through it and see what's going on:
A = [9 10 12 14 15 16 18 19 22 23 25];
B = [];
arr = [];
ii = 1;
while ii <= numel(A)
arr(1) = A(ii);
while ii~= numel(A) && A(ii+1) == A(ii)+1
arr = [arr A(ii+1)];
ii = ii + 1;
if ii > numel(A) - 1
break;
end
end
B = [B mean(arr)];
ii = ii + 1;
arr = [];
end
B

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Interpolation finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by