Average values only next to each other in a matrix

2 visualizaciones (últimos 30 días)
Jimmy Neutron
Jimmy Neutron el 16 de Abr. de 2021
Respondida: David Hill el 16 de Abr. de 2021
I have a matrix as such: (it is much longer irl)
A = [ 62.9; 63; 83.10; 83; 43; 43; 63; 63.2; 82.9; 83; 83; 62.90; 62.90; 62.9 ];
I am looking for an efficient way to average the values that surround the values next to each that are almost identical ( +- 0.2) other as such:
A_final = [ 62.95; 83; 43; 63.1, 83; 62.90 ]
I was thinking to do it with unique, but then I risk the possibility of the same value coming up in matrix A. Is there a simple way to do so in matlab?
  2 comentarios
the cyclist
the cyclist el 16 de Abr. de 2021
Step 1: Define "almost identical" mathematically.
Jimmy Neutron
Jimmy Neutron el 16 de Abr. de 2021
Added it :) it is plus minus 0.2

Iniciar sesión para comentar.

Respuesta aceptada

David Hill
David Hill el 16 de Abr. de 2021
I don't think there is an easy way, but a simple loop works.
A = [ 62.9; 63; 83.10; 83; 43; 43; 63; 63.2; 83; 83; 62.90; 62.90 ];
A_final=[];
b=A(1);
c=1;
for k=2:length(A)
if A(k)<1.1*b/c&&A(k)>.9*b/c
b=b+A(k);
c=c+1;
else
A_final=[A_final;b/c];
b=A(k);
c=1;
end
end
A_final=[A_final;b/c];

Más respuestas (1)

Ahmed Redissi
Ahmed Redissi el 16 de Abr. de 2021
You can reshape the n by 1 vector so that it is 2 by n/2 and then take the mean which will calculate the average for each column and give you the result that you want. Here is how it is done:
A = [62.9; 63; 83.10; 83; 43; 43; 63; 63.2; 83; 83; 62.90; 62.90];
n = length(A);
A_shaped = reshape(A,2,n/2);
A_final = mean(A_shaped)';

Categorías

Más información sobre Computational Geometry en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by