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

2 vues (au cours des 30 derniers jours)
edward kabanyas
edward kabanyas le 7 Fév 2021
Commenté : edward kabanyas le 9 Fév 2021
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.

Réponse acceptée

Matt Gaidica
Matt Gaidica le 8 Fév 2021
Modifié(e) : Matt Gaidica le 8 Fév 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 commentaires
Matt Gaidica
Matt Gaidica le 8 Fév 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
edward kabanyas
edward kabanyas le 9 Fév 2021
great Matt

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Interpolation dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by