How to sum up a few numbers in sequence and save as a separate matrix

I have a matrix like [0; 0; -1; -2; -1; 0; 0; 0; -2; -1; 0]. From here I would like to sum up sequences of non-zero values and save the result in a separate matrix. From the example, the result should be [-4; -3]. How should I write the code?
Thank you.

 채택된 답변

Here is an algorithm:
A = [0; 0; -1; -2; -1; 0; 0; 0; -2; -1; 0] % input
B = cumsum(A)
tf = diff([A==0 ; true])==1
C = B(tf)
D = [C(1) ; diff(C)] % output

추가 답변 (1개)

An alternate way using the Image Processing Toolbox:
A = [0; 0; -1; -2; -1; 0; 0; 0; -2; -1; 0] % input
measurements = regionprops(logical(A~=0), A, 'Area', 'MeanIntensity');
allAreas = [measurements.Area]
allIntensities = [measurements.MeanIntensity]
integratedValues = allAreas .* allIntensities
Of course you could combine it all into 2 lines if you wanted it more compact (but more cryptic):
measurements = regionprops(logical(A~=0), A, 'Area', 'MeanIntensity');
integratedValues = [measurements.Area] .* [measurements.MeanIntensity]

카테고리

도움말 센터File Exchange에서 Annotations에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

질문:

2015년 12월 4일

답변:

2015년 12월 4일

Community Treasure Hunt

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

Start Hunting!

Translated by