find sum of the run length of non zero elements between zeros of a matrix
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
PRIYAM DEKA
el 10 de Jul. de 2021
Respondida: Image Analyst
el 11 de Jul. de 2021
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]
0 comentarios
Respuesta aceptada
Walter Roberson
el 10 de Jul. de 2021
a = [ 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)
0 comentarios
Más respuestas (4)
Soniya Jain
el 10 de Jul. de 2021
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 comentarios
Simon Chan
el 10 de Jul. de 2021
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)
Image Analyst
el 11 de Jul. de 2021
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
0 comentarios
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!