# Average values only next to each other in a matrix

조회 수: 1 (최근 30일)
Jimmy Neutron 2021년 4월 16일
답변: David Hill 2021년 4월 16일
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없음 표시없음 숨기기
the cyclist 2021년 4월 16일
Step 1: Define "almost identical" mathematically.
Jimmy Neutron 2021년 4월 16일
Added it :) it is plus minus 0.2

댓글을 달려면 로그인하십시오.

### 채택된 답변

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 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에서 Computational Geometry에 대해 자세히 알아보기

### Community Treasure Hunt

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

Start Hunting!

Translated by