find the average of a vector with specific condition ?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
MUKESH KUMAR
am 4 Sep. 2018
Kommentiert: MUKESH KUMAR
am 4 Sep. 2018
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 Kommentare
jonas
am 4 Sep. 2018
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.
Akzeptierte Antwort
jonas
am 4 Sep. 2018
Bearbeitet: jonas
am 4 Sep. 2018
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 Kommentare
jonas
am 4 Sep. 2018
@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 :)
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Data Types finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!