Average values only next to each other in a matrix

2 次查看(过去 30 天)
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?

采纳的回答

David Hill
David Hill 2021-4-16
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];

更多回答(1 个)

Ahmed Redissi
Ahmed Redissi 2021-4-16
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)';

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by