find the average of a vector with specific condition ?

조회 수: 1 (최근 30일)
MUKESH KUMAR
MUKESH KUMAR 2018년 9월 4일
댓글: MUKESH KUMAR 2018년 9월 4일
I had A vector
A=[1 0 0 2 3 2 3 5 0 0 0 0 1 2 1 0 0 0 0 3 4 0 0 0 0 0 0 1 2 3 2 0 0 0 0 2 0 0]
like this. Now I want a vector B having average of corresponding non-zero value, like
B(1)=average(A(1));
B(4)=average(A(4):A(8));
B(13)=average(A(13):A(15);
B(20)=average(A(20):A(21));
B(28)=average(A(28):A(31)) and so on .....rest values should be zeros.
hence
B=[1 0 0 3 0 0 0 0 0 0 0 0 1.33 0 0 0 0 0 0 3.5 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 ]
  댓글 수: 5
MUKESH KUMAR
MUKESH KUMAR 2018년 9월 4일
So how can i take average of continuous values at starting point of each continuous group values and rest are zeros.
jonas
jonas 2018년 9월 4일
I'll give it a try in an hour if no one gave you an answer. This one is not as straight-forward as your previous questions, at least to me.

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

채택된 답변

jonas
jonas 2018년 9월 4일
편집: jonas 2018년 9월 4일
Credits to Guillaume for cleaning up my original code.
A=[1 0 0 2 3 2 3 5 0 0 0 0 1 2 1 0 0 0 0 3 4 0 0 0 0 0 0 1 2 3 2 0 0 0 0 2 0 0];
B=zeros(size(A));
bounds = find(diff([0, A, 0] ~= 0));
starts = bounds(1:2:end);
ends = bounds(2:2:end) - 1;
B(starts) = arrayfun(@(s, e) mean(A(s:e)), starts, ends);
  댓글 수: 4
jonas
jonas 2018년 9월 4일
@Guillaume: Thank you sir, I'll update the code.
@Mukesh: The code should work now. There was a minor error in my original post. You were too quick to grab it :)
MUKESH KUMAR
MUKESH KUMAR 2018년 9월 4일
thanks for your support :)

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by