find sum of the run length of non zero elements between zeros of a matrix

3 ビュー (過去 30 日間)
PRIYAM DEKA
PRIYAM DEKA 2021 年 7 月 10 日
回答済み: Image Analyst 2021 年 7 月 11 日
suppose my matrix is
a=[ 1 2 3 0 0 0 4 5 6 0 0 0 7 8 0 0 9 0 0 ]
output wanted is
[6 15 15 9]

採用された回答

Walter Roberson
Walter Roberson 2021 年 7 月 10 日
a = [ 1 2 3 0 0 0 4 5 6 0 0 0 7 8 0 0 9 0 0 ]
a = 1×19
1 2 3 0 0 0 4 5 6 0 0 0 7 8 0 0 9 0 0
mask = logical(a);
starts = strfind([0 mask], [0 1]);
stops = strfind([mask 0], [1 0]) + 1;
ca = cumsum([0 a]);
ca(stops) - ca(starts)
ans = 1×4
6 15 15 9

その他の回答 (4 件)

Soniya Jain
Soniya Jain 2021 年 7 月 10 日
a=[ 1 2 3 0 0 0 4 5 6 0 0 0 7 8 0 0 9 0 0 ];
j = 0;
i = 1;
while i ~= (length(a)+1)
if a(i)~=0
sum = 0;
while a(i)~=0
sum = sum + a(i);
i = i + 1;
end
j = j + 1;
res(j) = sum;
end
i = i + 1;
end
Here is the code of it, but if you are not familiar with how to write MATLAB code, then you can start with the MATLAB Onramp tutorial to quickly learn the essentials of MATLAB.
  2 件のコメント
PRIYAM DEKA
PRIYAM DEKA 2021 年 7 月 10 日
this code works but if the last element is non zero the code doesnot work.
though it can be corrected by defining a=[a 0] before the while loop.
thank you
Soniya Jain
Soniya Jain 2021 年 7 月 11 日
Oh yes, thanks for noticing that!

サインインしてコメントする。


Simon Chan
Simon Chan 2021 年 7 月 10 日
a=[ 1 2 3 0 0 0 4 5 6 0 0 0 7 8 0 0 9 0 0 ];
pos=diff(a)<0; % Position before hitting a zero
c=cumsum(a); % Cumulative sum
d=[0 c(pos)]; % Add a zero in the first position, otherwise first value will be lost
diff(d)
  1 件のコメント
PRIYAM DEKA
PRIYAM DEKA 2021 年 7 月 10 日
this code doesnot work if i have a higher no before a lower

サインインしてコメントする。


Matt J
Matt J 2021 年 7 月 10 日
編集済み: Matt J 2021 年 7 月 10 日
Using this File Exchange submission
it is quite easy.
result=groupFcn(@sum, a, groupTrue(a~=0))

Image Analyst
Image Analyst 2021 年 7 月 11 日
Here's another way:
a = [ 1 2 3 0 0 0 4 5 6 0 0 0 7 8 0 0 9 0 0 ]
% Extract each run:
props = regionprops(logical(a), a, 'PixelValues')
% Sum up each run.
for k = 1 : length(props)
theSums(k) = sum(props(k).PixelValues)
end

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by